7

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

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

4

2 回答 2

10

Microsoft 代码合同声明它永远不会为空。

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

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

于 2011-04-22T08:12:52.230 回答
6

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

例子:

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

    // Rest omitted for brevity
}
于 2011-04-21T17:07:45.743 回答