MemberInfo.DeclaringType上的奇怪的Resharper警告

时间:2011-04-21 17:02:32

标签: c# reflection resharper resharper-5.1

Resharper告诉我,MemberInfo.DeclaringType永远不能为null: enter image description here

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

2 个答案:

答案 0 :(得分: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;
    }
}

所以ReSharper在这里依赖代码合同。

答案 1 :(得分:6)

Resharper在这里完全错了。 MemberInfoabstract类型,任意实现都可以返回任意内容,包括null

示例:

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

    // Rest omitted for brevity
}