我尝试使用字典,需要检查键的值(称为名称)是否为空,如果是,则使用一些默认字符串作为我的键的值,例如“未知”。
我知道我可以使用 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);
更新:
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
表示没有值,而空字符串是 一个字符串,它只是空的。您不能对 null 调用 .ToString()
或 .Length
,您会得到一个异常,因为没有值可以处理该调用。
您可以使用Dictionary.TryGetValue检查是否存在并同时检索值。
之后,如果您确实想将所有内容都转换为字符串,可以使用 null-conditional operator ?.
调用 ToString()
,如果 name
为 null,则不会抛出异常。如果 name
为 null,则整个表达式 name?.ToString()
的计算结果也为 null
。
然后您可以使用null-coalescing operator ??
用默认值替换空值:
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;
关于c# - 检查字典中key的值是否为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60414914/