Ответ 1
Вы сказали, что используете GenericPrinciple
как реализацию IPrincipal
. Для этого класса свойство Identity
действительно никогда не может быть null
. Легко видеть, смотрите ли вы на исходный код (например, используя JetBrains dotPeek).
Вы можете поблагодарить аннотации кода ReSharper для библиотек классов .NET Framework для этого.
В моих аннотациях 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 умный (и правый!).