我尝试使用字典,需要检查键的值(称为名称)是否为空,如果是,则使用一些默认字符串作为我的键的值,例如“未知”。
我知道我可以检查一个字符串,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)
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)
您可以尝试使用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)
| 归档时间: |
|
| 查看次数: |
26890 次 |
| 最近记录: |