显然,即使密钥是可空类型,也不能使用null作为密钥.

此代码:

var nullableBoolLabels = new System.Collections.Generic.Dictionary<bool?, string>
{
    { true, "Yes" },
    { false, "No" },
    { null, "(n/a)" }
};

.导致此异常:

值不能为空.

描述:执行当前web请求期间发生未经处理的异常.请查看堆栈跟踪以了解有关错误的更多信息,以及错误在代码中的起源.

[ArgumentNullException: Value cannot be null. Parameter name: key] System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument) +44 System.Collections.Generic.Dictionary'2.Insert(TKey key, TValue value, Boolean add) +40
System.Collections.Generic.Dictionary'2.Add(TKey key, TValue value) +13

Why would the .NET framework allow a nullable type for a key, but not allow a null value?

推荐答案

它会告诉你同样的事情,如果你有一个Dictionary<SomeType, string>,SomeType是一个引用类型,并且你试图传递null作为键,它不是像bool?这样只影响可空类型的东西.您可以使用任何类型作为键,无论是否可以为空.

这一切都归结为一个事实:你无法真正比较nulls.我假设不能将null放入键中的逻辑,一个设计用于与其他对象进行比较的属性是,它使得比较null个引用变得不连贯.

如果您想从规范中找出原因,可以归结为"A key不能为空引用"(A Key Not Be A Null Reference)on MSDN.

如果你想要一个可能的解决方法的例子,你可以try 类似于Need an IDictionary implementation that will allow a null key的方法

.net相关问答推荐

为什么Linq中的运算符逻辑不匹配结果,当值为0或在VB. NET中没有

无法通过构建目标访问 dotnet 的环境变量

Dictionary.FirstOrDefault() 如何判断是否找到了结果

使用 Thread.Abort() 有什么问题

.Include() 与 .Load() 在 EntityFramework 中的性能

在 web api 控制器(.net 核心)中使用 async/await 或任务

将 DataRowCollection 转换为 IEnumerable

如何解决请确保文件可访问并且它是有效的程序集或 COM 组件?

如何获取 Sql Server 数据库中所有模式的列表

如何判断对象是否是某种类型的数组?

如何授予所有用户对我的应用程序创建的文件的完全权限?

双倍的? = 双倍? + 双倍?

Double.TryParse 或 Convert.ToDouble - 哪个更快更安全?

CI服务器的比较?

如何从头开始以编程方式配置 log4net(无配置)

安装带有恢复操作的 Windows 服务以重新启动

功能说明

忽略 LINQ to XML 中的命名空间

如何使用 NPOI 读取文件

.NET 桌面应用程序中的 Settings.settings 与 app.config