2014-04-02 101 views

回答

6

你看到的是ReSharper's Annotation[CanBeNull]的結果,即適用於財產MemberInfo.DeclaringType

(這是ReSharper的QuickDoc功能,按按Ctrl + QCtrl + Shift + F1,取決於您使用的鍵綁定,屬性)。

我最近recorded a webinar與JetBrains公司,在深入discussnig註解,所以歡迎您觀看有關如何工作的詳細信息,但基本上,ReSharper的「知道」​​財產可以在運行時可能爲null 。這是因爲MemberInfo實現中的任何一個都可能會從此屬性返回null。例如,ConstructorInfodoes this

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

在任何情況下,因爲潛在的​​的實現方式之一可以是零,ReSharper的警告你這件事,所以你需要做一個空檢查。

+0

感謝您的詳細解釋。這有助於 – ckv

+0

@ckv謝謝!如果您發現此答案有幫助,請將其標記爲已接受:)這就是StackOverflow的工作原理! –

3

由於GetCurrentMethod()可能會假定返回null,當它嘗試訪問.DeclaringType時,它會隨着您的錯誤而失敗。建議您運行GetCurrentMethod()並在訪問屬性之前以防禦方式檢查其結果。這是同爲DeclaringType和訪問Name屬性

2

GetCurrentMethod的簽名是:

public static System.Reflection.MethodBase GetCurrentMethod()

由於它的返回類型是引用類型,接着是獲得財產,R#能不知道方法GetCurrentMethod是否返回null。你知道的。 R# - 不知道。

2

因爲GetCurrentMethod或​​可能會返回null,並且您無法訪問空對象的屬性。

相關問題