天天看點

你知道 typeof(void) 嗎?

    void 也是.NET中的一種類型,隻不過在C#中看不到“System.VOid”這種Type,而在IL這一層是可以看到的。

    如果我們要通過反射判斷一個方法是否有傳回值,比較直覺的解決辦法好像是這樣:    

MethodInfo originMethod = 

你知道 typeof(void) 嗎?

;

if (originMethod.ReturnType != null)

{

    //

你知道 typeof(void) 嗎?

}

    然而運作後,你會發現,在任何情況下,originMethod.ReturnType的值始終不會為null,即使originMethod沒有傳回值--這種情況下,originMethod.ReturnType的結果是typeof(void)。是以,改成如下的方式即可:

你知道 typeof(void) 嗎?

if (originMethod.ReturnType != typeof(void))

你知道 typeof(void) 嗎?

    void類型和其他Type一樣,是一種IL的基本類型。在反射或使用Emit動态生成程式集時要特别注意這一點。