16

ASP.NET MVCコントローラークラスの 1 つに単純なプロパティがあります。

ここに画像の説明を入力

これまでに何度も見たことがあるので、メッセージの意味は理解できますが、通常は完全に理にかなっています。ただし、これはそうではありません。下線付きのステートメントにたどり着くには、 NULL である必要Userはないため、チェックは問題ありませんUser.Identity

IdentityプロパティはIPrincipalインターフェイスの一部であり、継承するオブジェクトを返しますIIdentity

このインターフェイス、またはそのための任意のインターフェイスを継承するには、このプロパティが参照型である必要があるため、null になる可能性があります。

では、なぜ私の最愛の ReSharper がうめき声を上げているのでしょうか?

4

1 に答える 1

17

GenericPrincipleの実装としてを使用していると述べました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 に答える