我尝试使用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((:""(;