簡體   English   中英

默認(T)與Activator.CreateInstance(T)

[英]default(T) versus Activator.CreateInstance(T)

我想知道以下陳述是否會為參考類型返回不同的結果,或者它們是否相同?

  1. default(T)
  2. Activator.CreateInstance(T)

如果它們相同,你是否總能使用默認值(T),在這個例子中,如果目標是輸出默認值T?:

if (typeof(T).IsValueType || typeof(T) == typeof(String))
{
     return default(T);
}
else
{
     return Activator.CreateInstance<T>();
}

測試泛型類型是字符串的最佳方法是什么? (C#)

TA!

它們完全不同。

  1. default(T) ,當T是引用類型時,將始終為null
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM