2009-02-06 68 views
4

我知道「default」關鍵字返回靜態確定類型的默認值,例如this question如何以非泛型方式獲取某個類型的默認值?

但是,給定一個類型的實例,是否有一種簡單的方法來動態獲取此類型的默認值? 我發現谷歌搜索,而唯一的辦法就是this

static object DefaultValue(Type myType) 
{ 
    if (!myType.IsValueType) 
     return null; 
    else 
     return Activator.CreateInstance(myType); 
} 

,但我想如果可能的話,避免Activator類。

+0

歡迎世界表達? http://stackoverflow.com/questions/6582259/fast-creation-of-objects-instead-of-activator-createinstancetype :) – nawfal 2013-04-24 12:05:44

回答

6

這可能是您的最佳路線。

我不會害怕在這裏使用Activator類。這是編譯器所依賴的一個非常標準的類。比如這個VB代碼

Public Sub Example(Of T as New)() 
    Dim x = new T() 
End Sub 

轉換成大致是這樣的代碼

Public Sub Example(Of T As New)() 
    Dim x = Activator.CreateInstance(OF T) 
ENd Sub 
+0

這是泛型(OP想要避免),並不是相同的「默認「 - 它應該爲類返回null。 – 2009-02-06 13:40:48

6

你爲什麼要避免激活?基本上這樣做的方式。

我的意思是,你可以寫一個通用的方法,然後通過反射調用,但這是一個相當可怕的「長切」,只是爲了避免Activator。