空检查运算符不适用于WebOperationContext.Current?.IncomingRequest

时间:2018-07-18 15:17:06

标签: c#

当我尝试在以下代码中添加null检查运算符时,这看起来很奇怪

 WebOperationContext.Current?.IncomingRequest?.Headers[""]; 

这没有找到空值,Resharper以某种方式认识到问号将不起作用并将其变灰。 但是以下方法有效。

var httpIncomingRequest = WebOperationContext.Current?.IncomingRequest;
            var _ = httpIncomingRequest?.Headers[]

IncomingRequest对象有什么特别之处,它会阻止我们使用null检查运算符?

2 个答案:

答案 0 :(得分:1)

您错过了Headers中的支票。这证明了我的假设。 Headers

中有支票也没有例外

https://dotnetfiddle.net/OqcL9U

WebOperationContext.Current?.IncomingRequest?.Headers?[""]; 

答案 1 :(得分:1)

我反编译了WebOperationContext类,发现IncomingRequest属性从不返回null:

public IncomingWebRequestContext IncomingRequest
{
  get
  {
    return new IncomingWebRequestContext(this.operationContext);
  }
}

所以看来R#正在分析程序集字节码并试图检查问号是否多余。