Girdi,

2012-09-20 21 views
5

Null olduğunda, Parçayı, Float için bir dize ayrıştırmak istiyorum. Ve dize boş olduğunda 0 (float valule olarak) geçecektir.Girdi,

böyle ayrıştırma yapıyordu:

ERROR MESSAGE : Input string was not in a correct format. 
ERROR SOURCE : at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 
    at System.Number.ParseSingle(String value, NumberStyles options, NumberFormatInfo numfmt) 
    at System.Single.Parse(String s, NumberStyles style, NumberFormatInfo info) 
    at System.Single.Parse(String s) 

bu durumun üstesinden gelmek için en iyi yolu önermek edin: hataları verdi

aeVehicle.MSRP = float.Parse((drInvetory["MSRP"] ?? "0").ToString()); 

. drInvetory["MSRP"] bir DataRow geliyorsa böylece şamandıra ayrıştırma başarısız olur, DBNull kıyasla

+4

"verilen hatalar" ı tanımlar –

+0

Lütfen düzenlemeyi qsn. –

cevap

8

null coalescing operator true değerlendirmek olmaz. DBNull.Value için karşılaştırabilir veya float.TryParse()'u kullanabilirsiniz.

aeVehicle.MSRP = float.Parse(drInvetory["MSRP"] == DBNull.Value ? "0" : drInvetory["MSRP"].ToString()); 

Şahsen Orjinal Kod itibaren

, ben DBNull denetlemek ve sonra Ģamandıraya döküm (tam tipine veya Unbox ardından dökme) olacaktır. Bu, nispeten pahalı bir ip tahsisi tasarrufu sağlar. Daha iyi

aeVehicle.MSRP = drInvetory["MSRP"] == DBNull.Value ? default(float) : 
(float)drInvetory["MSRP"]; 

SQL CLR tipi eşleme: Ayrıca http://msdn.microsoft.com/en-us/library/bb386947.aspx
bakınız: Difference between decimal, float and double in .NET?

+0

Bunu asla bilmiyordum ... Evet, bir DataRow –

+3

'dan geliyor, 'DBNull', * çok fazla * seviyesinde büyük bir acı. –

+0

@Tim Medora..i bunu iki kez kontrol ettiniz ... doğru mu… bana bugün harika bir şey öğrettin .. Teşekkürler –

0
float f = 0f; 
string s = (drInvetory["MSRP"] ?? "0").ToString(); 
if (s != null) { 
    f = float.Parse(s, ... 
} 
+2

'0.0' bir 'çift'; 0f daha iyi ya da sadece 0 olur. –

+0

Teşekkürler - bugün Java arazisinde bulundu (mazeret yok, 0.0 javada da iki katı). – John3136

+0

Neden ToString()? Bu zaten bir dizedir. Ve s boş olamaz, bu yüzden gerekli değilse. DrInvetory ["MSRP"] bir dize değilse bu derleme yapmaz. –

0

kullanmanız gereken TryParse:

float num = 0; 
    float.TryParse(s, out num); 
0

Beklenmedik neden olabilir dizeninizdeki virgül. Önce virgül atmaya çalış. Ayrıştırma başarısız olursa

0
float result = 0; 
float.TryParse(drInvetory["MSRP"], out result); 
aeVehicle.MSRP = result; 

Bu yolla, sonra herzaman düşecek geri olacak 0.

0

başka basit alternatif geçerli:

aeVehicle.MSRP = float.Parse("0" + drInvetory["MSRP"].ToString()); 

Pozitif sayılar için çalışacaktır. aksi takdirde en uygun olanı Microsoft.VisualBasic.Val işlevini kullanın.