检查字典中key的值是否为null

8 .net c# string dictionary

我尝试使用字典,需要检查键的值(称为名称)是否为空,如果是,则使用一些默认字符串作为我的键的值,例如“未知”。

我知道我可以检查一个字符串,string.Length == 0但我的问题是我有一个对象作为值,并且我很难捕获它。

那是我的代码:

 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);
Run Code Online (Sandbox Code Playgroud)

更新:

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");
    }
Run Code Online (Sandbox Code Playgroud)

Pan*_*vos 6

null和空字符串是完全不同的东西。null意味着没有值,而空字符串字符串,它只是空的。您不能在 null 上调用.ToString()or .Length,您会得到一个异常,因为没有值来处理该调用。

您可以使用Dictionary.TryGetValue检查是否存在并同时检索值。

之后,如果您确实想将所有内容都转换为字符串,则可以使用null 条件运算符 ?.进行调用ToString(),而不会抛出 if nameis null 的情况。如果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");
}
Run Code Online (Sandbox Code Playgroud)

如果您只想用默认值替换空值,则不需要ToString()

if(de.TryGetValue("Name2",out var name))
{
    parameters.Add("Name2", name ?? "unknown");
}
Run Code Online (Sandbox Code Playgroud)

如果要检查 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);
}
Run Code Online (Sandbox Code Playgroud)

最后,如果您想替换字典中现有的键parameters,请使用

parameters["Name2]= newValue;
Run Code Online (Sandbox Code Playgroud)


Pav*_*ski 5

您可以尝试使用ContainsKey方法来检查Name字典中是否存在键。null然后通过检查是否使用空条件?.运算符来获取实际的字符串值。如果结果是null空字符串,则将名称设置为unknown

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