在这种情况下,为什么resharper显示System.NullReferenceException
警告?
MethodBase.GetCurrentMethod().DeclaringType.Name
我的代码中有很多地方都有上面的代码行。为什么雷斯哈珀要警告我?
我查过类似的问题,但没有完全匹配。
最佳答案
您看到的是ReSharper's Annotation[CanBeNull]
的结果,它应用于属性MemberInfo.DeclaringType
:
(这是resharper的quickdoc功能,在属性上按ctrl+q或ctrl+shift+f1,具体取决于使用的键绑定)。
我最近与jetbrains一起深入讨论了nig注释,因此欢迎您查看它,以获取有关如何工作的更多信息,但基本上,resharper“知道”在运行时DeclaringType
属性可能为空。这是因为任何一个MemberInfo
实现都可能从该属性返回null。例如,ConstructorInfo
recorded a webinar:
public override Type DeclaringType
{
get
{
return m_reflectedTypeCache.IsGlobal ? null : m_declaringType;
}
}
在任何情况下,由于
DeclaringType
的一个实现可能是空的,resharper会警告您,因此您需要进行空检查。