有什麼辦法從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不能類型鑄造。仍然我想知道是否有
任何工作? 在此先感謝
有什麼辦法從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不能類型鑄造。仍然我想知道是否有
任何工作? 在此先感謝
您如何預計將null
投到任何東西?這是空,沒什麼,虛無縹緲......
這就是說,你最好的選擇將是檢查DBNull
(或null
在上述情況下),並使用/返回/不管default(decimal)
代替,雖然null
和DBNull
都有一個顯著與默認值的語義差異;他們缺乏價值,所以這可能不是你想要做的。
如果將DBNull轉換爲Decimal,那麼您會期望該小數具有什麼值?
我認爲有一個Decimal.TryParse()函數會更優雅地失敗。
DBNull
和null
之間有很大的差異;你的例子只顯示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
您是否考慮過爲您的返回值使用可爲空的小數?
儘管您仍然必須顯式處理DB.Null,因爲它與null不同,您可以區分這些情況。
的代碼可能是這個樣子......
if (value == DB.Null)
return null;
else return decimal.Parse(value.ToString());
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());
甚至更短:十進制d = foo作爲小數? ?? 0米 – 2017-12-30 19:55:49
請問這幫助?
returnvalue[returnvalue.Length - 1] is DBNull ? 0 : (decimal?)returnvalue[returnvalue.Length - 1] ?? 0
你可以簡單地這樣做:
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]);
哪裏`DBNull`在你的榜樣?這只是一個簡單的`null`。 – 2009-07-12 09:54:43
DBNull與null有點不同。空表示沒有可用的對象。 DBNull表示該值未知。如果你得到一個DBNull,那麼按照定義,這個值目前不是你所知道的。你怎麼把它轉換成小數?您需要自己決定默認值並分配它。 – 2009-07-12 10:03:56