Странное предупреждение Resharper на MemberInfo.DeclaringType
Решарпер говорит мне, что MemberInfo.DeclaringType никогда не может быть нулевым:
Однако, когда этот код выполняется, печатается текст "Член верхнего уровня". Я не понимаю, что здесь не так?
2 ответа
Решение
Решарпер здесь просто не прав. MemberInfo
является abstract
типа, и это возможно для произвольной реализации, чтобы вернуть все, что угодно, в том числе null
Пример:
class EvilMemberInfo : MemberInfo
{
public override System.Type DeclaringType
{
get { return null; }
}
// Rest omitted for brevity
}
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 полагается на кодовые контракты здесь.