2011-08-11 50 views
20

如何在動態對象上執行空檢查C#:如何對動態對象執行空檢查

僞代碼:

public void Main() { 
    dynamic dynamicObject = 33; 
    if(true) { // Arbitrary logic 
     dynamicObject = null; 
    } 
    Method(dynamicObject); 
} 

public void Method(dynamic param) { 
    // TODO: check if the content of 'param' is equal to null 
} 

回答

30

您是否擔心可能的動態對象將有一個自定義相等操作符,這將改變null被解釋的方式嗎?如果是這樣只需使用Object.ReferenceEquals

if (Object.ReferenceEquals(null, param)) { 
    ....... 
} 
+3

+1當然。你可能會失去'Object.',雖然 – Ani

+0

@Ani不知道你在那裏得到了什麼。 – JaredPar

+1

你可以寫'ReferenceEquals(null,param)'。我無法相信在這個話題上的5個問題沒有解決這個問題。 –

0

你可以隨時讓類型的對象帕拉姆,這就是編譯器在做什麼。當你輸入一個動態參數時,它僅僅意味着在該方法中它只對所有param的使用使用動態調用,但在它之外它只是一個對象類型的簽名。 dynamicObject的一個更強大的用法是重載你調用的方法,所以如果你保持你的例子相同,並且只有兩個重載,它會根據運行時類型調用兩個方法之一,並且你總是可以爲更多類型添加更多內容。

public void Main() { 
    dynamic dynamicObject = 33; 
    if(true) { // Arbitrary logic 
     dynamicObject = null; 
    } 
    Method(dynamicObject); 
} 
public void Method(int param) { 
    //don't have to check check null 
    //only called if dynamicObject is an int 
} 
public void Method(object param) { 
// will be called if dynamicObject is not an int or null 
}