我正在使用Dictionary<string, string>
并添加一个空值的项目(在我的实际情况下,它是一个变量)。
var testDictionary = new Dictionary<string, string>();
testDictionary.Add("Test", null);
这会导致警告“可能'null'赋值给标记为'NotNull'属性的实体”。
如果我让ReSharper将其转换为Collection Initializer,则不会显示任何警告。
var testDictionary = new Dictionary<string, string> {{"Test", null}};
那么,字典的值是否用'NotNull'属性标记是真的吗?或者还有其他事情发生了吗?
编辑:这个问题与Resharper: Possible null assignment to entity marked with notnull attribute没有太大的不同,但我的问题的答案是不同的(这是R#中的一个错误,并且向集合添加空元素不是一个好主意)。
答案 0 :(得分:7)
通常,将null
元素放入集合中是一种不好的做法。绝大多数使用集合的代码假定集合中的值不是null
。如果null
是一个有效的集合元素,它确实使所有消费代码复杂化。
例如,您基本上需要编写
foreach (var cur in theCollection) {
if (cur.Value == null) {
continue;
}
...
}
对于这种特定情况,它看起来只是R#缺少集合初始化器的情况。 null
在集合中出乎意料。
而不是null
为什么不使用String.Empty
?
答案 1 :(得分:2)
是的,其他 正在继续 - 你需要升级你的R#;)
答案 2 :(得分:0)
ReSharper有问题。您可以编辑使用菜单来检查“可能为空...”的选项,如果要禁用警告,则将其更改为“不显示”。
代码非常好,虽然我无法想象你为什么要添加null(通常指向糟糕的设计/算法,有更简洁的方法)。