Resharper告诉我,MemberInfo.DeclaringType永远不能为null:
但是,当运行该代码时,将打印文本“顶级成员”。我不明白,这里有什么不对?
答案 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在这里完全错了。 MemberInfo
是abstract
类型,任意实现都可以返回任意内容,包括null
示例:
class EvilMemberInfo : MemberInfo
{
public override System.Type DeclaringType
{
get { return null; }
}
// Rest omitted for brevity
}