странное предупреждение Resharper на MemberInfo.DeclaringType - PullRequest
7 голосов
/ 21 апреля 2011

Resharper говорит мне, что MemberInfo.DeclaringType никогда не может быть нулевым: enter image description here

Однако, когда этот код выполняется, выводится текст «Элемент верхнего уровня».Я не понимаю, что здесь не так?

Ответы [ 2 ]

10 голосов
/ 22 апреля 2011

Microsoft Code Contracts заявляет, что оно никогда не равно нулю.

// System.Reflection.MemberInfo
public virtual Type DeclaringType
{
    get
    {
        Contract.Ensures(Contract.Result<Type>() != null, null, "Contract.Result<Type>() != null");
        Type result;
        return result;
    }
}

Так что ReSharper использует здесь Code Contracts.

6 голосов
/ 21 апреля 2011

Решарпер здесь просто не прав.MemberInfo - это тип abstract, и произвольная реализация может вернуть все, что пожелает, включая null

Пример:

class EvilMemberInfo : MemberInfo
{
    public override System.Type DeclaringType
    {
        get { return null; }
    }

    // Rest omitted for brevity
}
...