default(T) 和 Activator.CreateInstance(T) 的区别

12

2
不,对于引用类型,默认值(T)返回null,而CreateInstance()不会,因为它创建了一个T类型的对象。很难猜测这段代码的真正目的。 - Hans Passant
2
default(string) 也不是 null 吗? - BoltClock
感谢您澄清了混淆的部分!代码示例是混淆的一部分,我在下面链接的stackoverflow帖子中看到了它。 - Cel
5个回答

19

它们完全不同。

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

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

3

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


3
如果找不到这样的构造函数,就抛出一个异常。 - BoltClock
当然。这是一个特殊情况,它实际上不会返回任何东西。 - cdhowie

2

default(T)会对引用类型返回null。而Activator.CreateInstance<T>()则不同,它不会返回null。在.NET中,string是一个引用类型。


2

不确定你在问什么,但它们是不同的:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接