default(T) versus Activator.CreateInstance(T)

本文关键字:CreateInstance Activator versus default | 更新日期: 2023-09-27 18:06:47

我想知道下面的语句是否为引用类型返回不同的结果,或者它们是相同的?

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

如果它们是相同的,在本例中,如果目的是输出T的默认值,您是否总是使用default(T) ?:

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

测试泛型是否是字符串的最佳方法?(c#)

助教!

default(T) versus Activator.CreateInstance(T)

它们完全不同。

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

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

T是引用类型时,它们总是返回不同的结果。default(T)将返回null,而Activator.CreateInstance<T>()将返回T的一个新实例,该实例使用T的公共无参数构造函数创建。

对于引用类型,default(T)将返回nullActivator.CreateInstance<T>()不会。string是。net中的一个引用类型。

不知道你在问什么,但他们是不同的:

default(T)返回null如果T不是一个值类型…CreateInstance调用创建一个实例,如果有默认构造函数,则调用它(否则抛出异常)…