2009-07-12 33 views
2

有什麼辦法從DB.Null轉換爲C#中的十進制?任何方式來從DB.Null轉換爲十進制的C#

Object[] returnvalue = new Object[1]; 
returnvalue[0] = null; 
returnvalue[0] = Convert.ToDecimal(returnvalue[returnvalue.Length - 1]); 

雖然CLR是說,DBNull.Value不能類型鑄造。仍然我想知道是否有

任何工作? 在此先感謝

+0

哪裏`DBNull`在你的榜樣?這只是一個簡單的`null`。 – 2009-07-12 09:54:43

+0

DBNull與null有點不同。空表示沒有可用的對象。 DBNull表示該值未知。如果你得到一個DBNull,那麼按照定義,這個值目前不是你所知道的。你怎麼把它轉換成小數?您需要自己決定默認值並分配它。 – 2009-07-12 10:03:56

回答

7

您如何預計將null投到任何東西?這是空,沒什麼,虛無縹緲......

這就是說,你最好的選擇將是檢查DBNull(或null在上述情況下),並使用/返回/不管default(decimal)代替,雖然nullDBNull都有一個顯著與默認值的語義差異;他們缺乏價值,所以這可能不是你想要做的。

0

如果將DBNull轉換爲Decimal,那麼您會期望該小數具有什麼值?

我認爲有一個Decimal.TryParse()函數會更優雅地失敗。

5

DBNullnull之間有很大的差異;你的例子只顯示null ...

但在回答;不是真的......你應該給它什麼價值?

您可以測試並使用默認,或使用Nullable<decimal>(又名decimal?):

隨着null(不DBNull

decimal? valOrNull = (decimal?)returnvalue[0]; 

或採取DBNull考慮:

object val = returnvalue[0]; 
decimal? valOrNull = (val == null || val is DBNull) ? (decimal?)null 
      : (decimal?)val; // or convert if it is a string etc 
3

您是否考慮過爲您的返回值使用可爲空的小數?

儘管您仍然必須顯式處理DB.Null,因爲它與null不同,您可以區分這些情況。

的代碼可能是這個樣子......

if (value == DB.Null) 
    return null; 
else return decimal.Parse(value.ToString()); 
3
 object foo = DBNull.Value; 
     decimal d = 0; 

     d = (decimal)(foo as decimal? ?? 0); // handles dbnull fine with default 0 

     MessageBox.Show(d.ToString()); 

     foo = 1234M; 

     d = (decimal)(foo as decimal? ?? 0); // handles dbnull fine with default 0 

     MessageBox.Show(d.ToString()); 
+0

甚至更​​短:十進制d = foo作爲小數? ?? 0米 – 2017-12-30 19:55:49

0

請問這幫助?

returnvalue[returnvalue.Length - 1] is DBNull ? 0 : (decimal?)returnvalue[returnvalue.Length - 1] ?? 0 
1

你可以簡單地這樣做:

Object[] returnvalue = new Object[1]; 
returnvalue[0] = DBNull.Value; //null from database 
returnvalue[0] = returnvalue[0] == DBNull.Value 
? null 
: (Nullable<decimal>) Convert.ToDecimal(returnvalue[returnvalue.Length - 1]);