在这种情况下,为什么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。例如,ConstructorInforecorded a webinar

public override Type DeclaringType
{
    get
    {
        return m_reflectedTypeCache.IsGlobal ? null : m_declaringType;
    }
}

在任何情况下,由于DeclaringType的一个实现可能是空的,resharper会警告您,因此您需要进行空检查。

08-07 16:33