这是来自我的一个类的代码,其中包含自定义indexer:
public string this[string key]
{
get => /* ... */;
set
{
if (key != null) doSomething(key, value);
}
}
现在,ReSharper强调key != null
检查并说:
表达总是如此。
虽然我确实认为ReSharper在这里是正确的,但我无法理解为什么。
也许the language spec强制执行此操作?
我的问题:
索引器参数是否可以为空?
更新1:
在删除我的问题之前,因为我太愚蠢,只是说明为什么ReSharper写了警告:
我从IDictionary<TKey, TValue>
派生了我的类,它似乎被ReSharper注释为没有null
的索引器参数。
因此,警告。很抱歉发布了这样一个非问题。
答案 0 :(得分:1)
不确定为什么ReSharper似乎确定表达式始终为true,因为可以将null传递给索引器。但是,如果您有两个接受引用类型的索引器,则索引null将是不明确的,除非转换为null。也许ReSharper并没有考虑到你仍然可以转换为null的事实,因此假设你永远不能将null传递给索引器,而索引器再次被证明是不真实的。