检查键的字典值是否为null



我尝试使用Dictionary,需要检查键(名为Name(的值是否为空,如果为空,则使用一些默认字符串作为键的值,类似于"未知"。

我知道我可以用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条件运算符?.来调用ToString(),而不必在name为null时抛出。如果name为null,则整个表达式name?.ToString()的计算结果也为null

然后,您可以使用null合并运算符??将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");
}

如果您只想用默认值替换null,则不需要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((:""(;

最新更新