strange Resharper warning on MemberInfo.DeclaringType

623 views Asked by At

Resharper tells me that MemberInfo.DeclaringType can never be null: enter image description here

However when that code is run, the text "Top level member" is printed. I don't get it, what's wrong here?

2

There are 2 answers

5
JaredPar On BEST ANSWER

Resharper is simply wrong here. MemberInfo is an abstract type and it's possible for an arbitrary implementation to return whatever it pleases including null

Example:

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

    // Rest omitted for brevity
}
1
Evgeny Pasynkov On

Microsoft Code Contracts states that it is never null.

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

So ReSharper relies on Code Contracts here.