Resharper tells me that MemberInfo.DeclaringType can never be null:
However when that code is run, the text "Top 开发者_Go百科level member" is printed. I don't get it, what's wrong here?
Microsoft Code Contracts states that it is never null.
// System.Reflection.MemberInfo
public virtual Type DeclaringType
{
get
{
Contract.Ensures(Contract.Result<Type>() != null, null, "Contract.Result<Type>() != null");
Type result;
return result;
}
}
So ReSharper relies on Code Contracts here.
Resharper is simply wrong here. MemberInfo
is an abstract
type and it's possible for an arbitrary implementation to return whatever it pleases including null
Example:
class EvilMemberInfo : MemberInfo
{
public override System.Type DeclaringType
{
get { return null; }
}
// Rest omitted for brevity
}
精彩评论