2010-04-09 56 views
1
string mvi = Moneys.GetValue(8) as string; 
if (mvi == null) 
    // I am getting exception Here if its null? 
    money.Currency= Convert.ToDecimal(""); 
else 
    // Currency is Decimal 
    money.Currency= Convert.ToDecimal(mvi); 
// I am getting exception Here if its null? 
money.Currency= Convert.ToDecimal(""); 

誰能告訴我如何做到這一點?如何做這個轉換?

+0

只是爲了澄清,你是否希望null和empty計數爲零,而亂碼引發異常? – 2010-04-09 22:07:14

+0

我會認爲是的。 – 2010-04-09 22:07:45

回答

1

這裏是我的版本安東尼Pegram的回答:

string mvi = Moneys.GetValue(8) as string; 
money.Currency = 0M; 
if (!String.IsNullOrEmpty(mvi)) 
    if (!Decimal.TryParse(mvi, out money.Currency)) 
    throw new FormatException("mvi"); 

整體上,它看起來很有點像一個一個Alex做,只是它把空的,因爲零和顯示更多的錯誤處理。

4

空字符串是不可轉換爲十進制。你可以執行這樣

if (string.IsNullOrEmpty(mvi)) 
{ 
    money.Currency = 0M; 
} 
else 
{ 
    decimal temp = 0M; 
    if (decimal.TryParse(mvi, out temp)) 
    { 
     money.Currency = temp; 
    } 
    else 
    { 
     // you have an invalid input, handle 
    } 
} 
+0

這是正確的,但有點長。我已經把一個更緊湊的版本作爲一個單獨的答案。 – 2010-04-09 21:59:53

1

檢查您可以使用TryParse代替Convert.ToDecimal()

decimal theValue; 
string mvi = Moneys.GetValue(8) as string; 
Decimal.TryParse(mvi, out theValue); 

或者,您可以使用空coallescing運營商preemtively處理空值:

var theValue = Convert.ToDecimal(mvi ?? "0"); 

但是,在這兩種情況下,如果輸入的值不是有效的小數,則必須決定如何處理。

+0

我認爲他實際上希望空和空都計爲零。 – 2010-04-09 21:59:26

+0

第二個示例將null計數爲零,但在空時失敗。第一個將空和空都計爲零,但也會將亂碼計爲零。 – 2010-04-09 22:09:53