16

我的一个 ASP.NET MVC控制器类中有一个简单的属性。

在此处输入图像描述

我以前见过很多次,所以要理解这个消息的含义,但通常它是完全有意义的。然而,事实并非如此。要到达带下划线的语句,User必须为空,所以检查User.Identity是好的。

Identity属性是IPrincipal接口的一部分,并返回一个继承的对象IIdentity

要继承此接口或任何与此相关的接口,此属性必须是引用类型,因此可能为 null,对吗?

那么为什么我心爱的 ReSharper 会呻吟呢?

4

1 回答 1

17

你说你正在使用GenericPrincipleas 的实现IPrincipal。对于这个类,Identity属性确实不可能是null如果您查看源代码(例如使用JetBrains dotPeek),很容易看到。

为此,您可以感谢 ReSharper 的 .NET 框架类库的代码注释。

在我的 ReSharper 6.1 注释中,有一个与此相关的单个代码注释(在文件ExternalAnnotations\mscorlib\mscorlib.4.0.0.0.Nullness.Generated.xml 中):

  <member name="M:System.Security.Principal.GenericPrincipal.#ctor(System.Security.Principal.IIdentity,System.String[])">
    <parameter name="identity">
      <attribute ctor="M:JetBrains.Annotations.NotNullAttribute.#ctor" />
    </parameter>
  </member>

不过,这仅适用于构造函数,我还没有找到该Identity属性的构造函数。因此,要么您使用的 ReSharper 版本也具有该属性的注释,要么 ReSharper 正在做一些额外的分析。

无论如何,ReSharper 很聪明(而且是对的!)。

于 2012-10-24T16:56:38.630 回答