default(T) versus Activator.CreateInstance(T)
本文关键字:CreateInstance Activator versus default | 更新日期: 2023-09-27 18:06:47
我想知道下面的语句是否为引用类型返回不同的结果,或者它们是相同的?
-
default(T)
-
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)
,当T
为引用类型时,将始终为null
。 -
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中的一个引用类型。
不知道你在问什么,但他们是不同的:
default(T)
返回null
如果T
不是一个值类型…CreateInstance
调用创建一个实例,如果有默认构造函数,则调用它(否则抛出异常)…