我想創建一個函數(C#):C#:從函數返回dbnull.value或system.type?
int PutInt (int? x)
{
if (x.HasValue)
return x.Value;
else
return DBNull.Value;
}
但沒有從int到DBNull.Value演員。 有什麼辦法可以創建這樣的功能?
我想創建一個函數(C#):C#:從函數返回dbnull.value或system.type?
int PutInt (int? x)
{
if (x.HasValue)
return x.Value;
else
return DBNull.Value;
}
但沒有從int到DBNull.Value演員。 有什麼辦法可以創建這樣的功能?
讓我們假設你的DBMS是SQLServer的,你可以將你的函數
object PutInt (int? x)
{
if (x.HasValue)
return (object)x.Value;
else
return (object)DBNull.Value;
}
因爲SQLParamater值屬性假定類型的對象。希望我回答你的問題。
'return x ?? (object)DBNull.Value;'? – Andrey 2011-05-08 12:49:42
這本質上是不可能的—值類型不能爲空。
您需要使用可爲空的類型(int?
),這會使您的函數完全無用。
即使你使用'int?',我仍然認爲它不會工作,因爲'DBNull'不是'int?'類型 – 2011-05-08 12:28:00
@Fadrian:正確。 – SLaks 2011-05-08 12:29:22
不,你不能投int
到DBNull.Value
。這用於評估數據庫字段的內容,而不是可空類型的內容。可爲空的類型的值將簡單地爲null
。
比您定義的函數更好的選項是使用null coalescing operator(??
)。
它與您試圖在函數中構建的邏輯非常相似。考慮下面的代碼行:
// Declare a nullable int, and set it to null
int? x = null;
// Assign int y to x, unless x is null, in which case, set y = -1
int y = x ?? -1;
// The variable y now has a value of -1
Console.WriteLine(y);
如果你是剛分配到對象變量的類型,我建議你只是忘記了使用方法,只是使用有條件分配
object obj = (x.HasValue? x.Value : DBNull.Value);
這可以重寫爲'x? DBNull.Value'。更漂亮了吧? – Andrey 2011-05-08 12:32:25
不,你不能,看到我的評論下面的SLaks。 – 2011-05-08 12:34:27
我剛剛開啓了VS並嘗試一下,證明你不能。如果你嘗試使用??,你會得到一個編譯錯誤「運營商」??不能應用於類型'int'和'System.DBNull'的操作數「 – 2011-05-08 12:35:57
你到底想幹什麼?這與數據庫有什麼關係? – BoltClock 2011-05-08 12:27:04
我只想把int \ dbnull放到數據庫中,並用小算法構建函數,選擇我需要在數據庫中放入的數據) – dilix 2011-05-08 12:41:12
也許你有設計問題。爲什麼名爲* PutInt *的方法實際返回一個int? – Juliet 2011-05-08 14:28:29