簡體   English   中英

檢查鍵的字典值是否為 null

[英]Check if dictionary value of key is null

我嘗試使用字典並需要檢查鍵的值(稱為名稱)是否為空,如果是,則使用一些默認字符串作為我的鍵的值,例如“未知”。

我知道我可以用string.Length == 0檢查一個字符串,但我的問題是我有一個 object 作為值,我很難捕捉到它。

那是我的代碼:

 IDictionary<string, object> parameters = new Dictionary<string, object>();
 string Name = de.Properties["Name"].Value.ToString(); //Name is sometimes empty and sometimes not
 parameters.Add("Name", Name);

更新:

IDictionary<string, object> parameters = new Dictionary<string, object>();
string Name = de.Properties["Name"].Value.ToString();
 if (parameters.TryGetValue("Name", out var Name))
    {
      parameters.Add("Name", Name ?? "unknown");
    }

null和空字符串是完全不同的東西。 null意味着沒有值,而空字符串一個字符串,它只是空的。 你不能在空值上調用.ToString().Length ,你會得到一個異常,因為沒有值來處理那個調用。

您可以使用Dictionary.TryGetValue來檢查是否存在並同時檢索值。

之后,如果您真的想將所有內容轉換為字符串,則可以使用空條件運算符?. 如果name為空,則調用ToString()而不拋出。 如果name為 null,則整個表達式name?.ToString()計算結果也為null

然后您可以使用空合並運算符?? 用默認值替換空值:

var de= new Dictionary<string, object?>();
de["Name1"]=null;
de["Name2"]=42;

if(de.TryGetValue("Name2",out var name))
{
    var valueAsString=name?.ToString() ;
    parameters.Add("Name2", valueAsString ?? "unknown");
}

如果您只想用默認值替換空值,則不需要ToString()

if(de.TryGetValue("Name2",out var name))
{
    parameters.Add("Name2", name ?? "unknown");
}

如果要檢查 null 或為空,可以使用String.IsNullOrEmpty

if(de.TryGetValue("Name2",out var name))
{
    var newValue=String.IsNullOrEmpty(name) 
                       ? "unknown" 
                       : name.ToString();  //Only if we want to format to strings
    parameters.Add("Name2", newValue);
}

最后,如果要替換parameters字典中的現有鍵,請使用

parameters["Name2]= newValue;

您可以嘗試使用ContainsKey方法檢查字典中是否存在Name鍵。 然后通過使用空條件?.檢查null值來獲取實際的字符串值?. 運營商 如果結果為null或空字符串,則將名稱設置為unknown

if (de.Properties.ContainsKey("Name"))
{
    var name = de.Properties["Name"]?.ToString();
    if (string.IsNullOrEmpty(name))
    {
        name = "unknown";
    }
}

string result= (string)(YourDictionaryName.TryGetValue(key, out var value)? YourDictionaryName["YourParameterName"].ToString(): "");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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