[英]Concise usage of DBNull? (Ternary?)
似乎三元運算符中存在某種類型的混淆。 我知道這已經在其他SO線程中得到了解決,但它始終是無效的。 另外,對於我的情況,我真的只是在尋找更好的方法。
我希望能夠使用
proc.Parameters[PARAM_ID].Value =
string.IsNullOrEmpty(dest.Id) ? DBNull.Value : dest.Id;
但相反,我堅持這個:
if (string.IsNullOrEmpty(dest.Id))
{
proc.Parameters[PARAM_ID].Value = DBNull.Value;
}
else
{
proc.Parameters[PARAM_ID].Value = dest.Id;
}
三元運算符失敗,因為DBNull和字符串之間沒有可能的轉換,並且看起來很傻,因為值似乎是對象,編譯器將它踢回給我,我不得不關心。 這個問題的可空版本的答案是將null轉換為字符串並完成它; 但是DBNull不能轉換成字符串,所以沒有運氣。
有沒有更簡潔的方法來做到這一點(順便說一下,沒有使用nullables?)
謝謝!
您可以將您的第一個語句更改為:
proc.Parameters[PARAM_ID].Value =
string.IsNullOrEmpty(dest.Id) ? (object)DBNull.Value : dest.Id;
Value
屬性是object
類型,因此您應該強制轉換為object
而不是string
:
proc.Parameters[PARAM_ID].Value = string.IsNullOrEmpty(dest.Id)
? (object)DBNull.Value
: (object)dest.Id;
或者您可以添加擴展方法,例如:
public static class DBNullExtensions
{
public static object AsDBNullIfEmpty(this string value)
{
if (String.IsNullOrEmpty(value))
{
return DBNull.Value;
}
return value;
}
}
然后你可以說
proc.Parameters[PARAM_ID].Value = dest.Id.AsDBNullIfEmpty();
(改編自Phil Haack )
可讀和簡潔,不是嗎?
那怎么用?? null-coalescing operator 更多關於??的詳細信息 操作者
proc.Parameters[PARAM_ID].Value = dest.Id ?? (object)DBNull.Value;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.