typeof(T) 与 new T().GetType()

Rei*_*l-- 0 c#

两个表达式保证相同吗?

在通用方法中Foo<T> where T : new()......这个表达式总是 true吗?

typeof(T) == new T().GetType()

我不明白它怎么可能是假的,但也许我错过了一个边缘情况。

我认为以下任何相关问题都没有解决这个问题:

har*_*old 7

typeof(T)并且new T().GetType()并不完全相同。事实上,new T().GetType()并不“安全”。

考虑何时T是 anint?或类似的东西,那么new T()将导致- 实际上是withnull的一个实例,它实际上是一个结构体。对没有值的可空值类型进行装箱会导致,并且对其继承的方法调用将首先对值进行装箱。因此在这种情况下会引发空引用异常。int?HasValue = falsenullobjectnew T().GetType()

这个表达式总是正确的吗
typeof(T) == new T().GetType()

它可能永远不会为假(即要么为真,要么不计算为值),但我可能会忽略其他一些奇怪的边缘情况。