索引器参数可以为null吗?

时间:2017-09-22 07:05:16

标签: c# .net resharper indexer

这是来自我的一个类的代码,其中包含自定义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的索引器参数。

因此,警告。很抱歉发布了这样一个非问题。

1 个答案:

答案 0 :(得分:1)

不确定为什么ReSharper似乎确定表达式始终为true,因为可以将null传递给索引器。但是,如果您有两个接受引用类型的索引器,则索引null将是不明确的,除非转换为null。也许ReSharper并没有考虑到你仍然可以转换为null的事实,因此假设你永远不能将null传递给索引器,而索引器再次被证明是不真实的。