Resharper 告诉我 MemberInfo.DeclaringType 永远不能为空:
但是,当该代码运行时,会打印文本“顶级成员”。我不明白,这里有什么问题?
Resharper 告诉我 MemberInfo.DeclaringType 永远不能为空:
但是,当该代码运行时,会打印文本“顶级成员”。我不明白,这里有什么问题?
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 在这里依赖代码契约。
Resharper 在这里是完全错误的。 MemberInfo
是一种abstract
类型,任意实现都可以返回它喜欢的任何内容,包括null
例子:
class EvilMemberInfo : MemberInfo
{
public override System.Type DeclaringType
{
get { return null; }
}
// Rest omitted for brevity
}