默认(T)与Activator.CreateInstance(T)

Cel*_*Cel 11 c# generics

我想知道以下陈述是否会为参考类型返回不同的结果,或者它们是否相同?

  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>();
}
Run Code Online (Sandbox Code Playgroud)

测试泛型类型是字符串的最佳方法是什么?(C#)

TA!

vcs*_*nes 18

它们完全不同.

  1. default(T),何时T是引用类型,将始终如此null.
  2. Activator.CreateInstance<T>()将使用默认构造函数(如果存在)创建该类型的新实例,否则抛出MissingMethodException.


Tom*_*ana 5

对于引用类型,default(T)将为null,而CreateInstance实际返回类型为T的新对象(如果没有合适的构造函数则失败),因此结果永远不会相同.