Странное предупреждение Resharper на MemberInfo.DeclaringType

Решарпер говорит мне, что MemberInfo.DeclaringType никогда не может быть нулевым:

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

2 ответа

Решение

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

Пример:

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

    // Rest omitted for brevity
}

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 полагается на кодовые контракты здесь.

Другие вопросы по тегам