ReSharper在泛型Collection的Value上显示可能的null赋值

时间:2012-04-13 14:50:55

标签: c# generics collections resharper

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

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

这会导致警告“可能'null'赋值给标记为'NotNull'属性的实体”。 Possible 'null' assignment

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

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

那么,字典的值是否用'NotNull'属性标记是真的吗?或者还有其他事情发生了吗?

编辑:这个问题与Resharper: Possible null assignment to entity marked with notnull attribute没有太大的不同,但我的问题的答案是不同的(这是R#中的一个错误,并且向集合添加空元素不是一个好主意)。

3 个答案:

答案 0 :(得分:7)

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

例如,您基本上需要编写

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

对于这种特定情况,它看起来只是R#缺少集合初始化器的情况。 null在集合中出乎意料。

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

答案 1 :(得分:2)

这是a bug, fixed in 6.0

是的,其他 正在继续 - 你需要升级你的R#;)

答案 2 :(得分:0)

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

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