![](/img/trans.png)
[英]Activator.CreateInstance(string) and Activator.CreateInstance<T>() difference
[英]default(T) versus Activator.CreateInstance(T)
我想知道以下陳述是否會為參考類型返回不同的結果,或者它們是否相同?
如果它們相同,你是否總能使用默認值(T),在這個例子中,如果目標是輸出默認值T?:
if (typeof(T).IsValueType || typeof(T) == typeof(String))
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
TA!
它們完全不同。
default(T)
,當T
是引用類型時,將始終為null
。 Activator.CreateInstance<T>()
將使用默認構造函數(如果存在Activator.CreateInstance<T>()
創建該類型的新實例,否則拋出MissingMethodException
。 對於引用類型, default(T)
將為null,而CreateInstance
實際上返回T類型的新對象(如果沒有合適的構造函數則失敗),因此結果永遠不會相同。
當T
是引用類型時,它們將始終返回不同的結果。 default(T)
將返回null
,而Activator.CreateInstance<T>()
將返回使用T
的公共無參數構造函數創建的T
的新實例。
default(T)
將為引用類型返回null
。 Activator.CreateInstance<T>()
不會。 string
是.NET中的引用類型。
不確定你問的是但它們是不同的:
如果T
不是值類型,則default(T)
返回null
... CreateInstance
調用創建一個實例並調用默認構造函數(如果有)(否則拋出異常)...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.