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

标签 c# .net 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);

更新:

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/

相关文章:

c# - 等待 PostAsJsonAsync 时抛出 AggregateException

c# - 如何转换 VC+ +'s DATE Type To C#' s DateTime?

c# - 在 Rider 中添加用于测试的资源文件

string - 将包含天、小时和分钟的字符串转换为 hh :mm:ss

python - 读取文件并与字典进行比较

c# - 在 C# WPF 中使用 MySQL 数据库使 Datagrid 可搜索

c# - Azure 存储表 ExecuteAsync 在 Retrieve TableOperation 上挂起

c# - 什么是申请和流程?

c# - Asp.Net MVC 默认路由

python - TypeError : string argument without an encoding in 3. 4 但在 3.6 中没有