4

我正在使用 aDictionary<string, string>并添加一个具有空值的项目(在我的实际情况下它是一个变量)。

var testDictionary = new Dictionary<string, string>();
testDictionary.Add("Test", null);

这会导致警告“可能对标有 'NotNull' 属性的实体进行 'null' 分配”。 可能的“空”分配

如果我让 ReSharper 将其转换为 Collection Initializer,它不会显示任何警告。

var testDictionary = new Dictionary<string, string> {{"Test", null}};

那么,字典的值是否被标记为“NotNull”属性?还是发生了其他事情?

编辑:这个问题与 Resharper 没有太大区别:可能为用 notnull 属性标记的实体分配空值,但我的问题的答案是不同的(这是 R# 中的一个错误,并且将空元素添加到集合不是一个好主意)。

4

3 回答 3

7

一般来说,将null元素放入集合中是一种不好的做法。使用集合的绝大多数代码都假定集合中的值不是null. 如果null是一个有效的集合元素,它确实使所有消费代码复杂化。

例如,您基本上需要编写

foreach (var cur in theCollection) {
  if (cur.Value == null) {
    continue;
  }
  ...
}

对于这种特定情况,看起来 R# 缺少集合初始值设定项情况。null出现在收藏中 绝对是出乎意料的。

而不是null为什么不使用String.Empty

于 2012-04-13T14:54:29.960 回答
2

这是一个错误,已在 6.0 中修复

所以是的,正在发生其他事情 - 你需要升级你的 R# ;)

于 2012-04-13T15:03:42.423 回答
0

ReSharper 故障。如果要禁用警告,您可以编辑使用菜单以检查“可能为空...”的选项并将其更改为不显示。

代码非常好,虽然我无法想象你为什么要添加 null (通常指向糟糕的设计/算法,那里有更简洁的方法)。

于 2012-04-13T14:57:20.867 回答