簡體   English   中英

DBNull的簡潔用法? (三元?)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM