MemberInfo.DeclaringType上的奇怪的Resharper警告

JBS*_*rro 7 c# reflection resharper resharper-5.1

Resharper告诉我,MemberInfo.DeclaringType永远不能为null: 在此输入图像描述

但是,当运行该代码时,将打印文本"顶级成员".我不明白,这里有什么不对?

Evg*_*kov 10

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以ReSharper在这里依赖代码契约.


Jar*_*Par 6

Resharper在这里完全错了. MemberInfo是一种abstract类型,任意实现都可以返回任何它喜欢的内容null

例:

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

    // Rest omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)