You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

typeof(T)与new T().GetType()是否始终相等?

问题

在带有约束where T : new()的泛型方法Foo<T>中,表达式typeof(T) == new T().GetType()是否始终为true?

我认为它不可能为false,但或许遗漏了某些边缘情况。

相关问题未涉及该疑问:

  • Type Checking: typeof, GetType, or is?
  • When and where to use GetType() or typeof()?
  • What is the difference of getting Type by using GetType() and typeof()?

回答

在满足where T : new()约束的前提下,这个表达式必然始终为true,不存在会导致结果为false的边缘情况,原因如下:

  • new()约束要求T必须是非抽象类型,且拥有可访问的无参构造函数,直接排除了抽象类、接口这类无法直接实例化的类型。
  • new T()会直接创建T类型的实例:C#中构造函数仅负责初始化当前类型的实例,无法返回派生类或其他类型的对象,因此实例的实际运行时类型就是T。
  • typeof(T)返回泛型参数T对应的编译时类型,GetType()返回对象的实际运行时类型,两者指向同一个Type实例,因此比较结果恒为true。

无论T是值类型、密封类还是带有自定义无参构造函数的类型,只要符合new()约束,new T()创建的实例类型都严格等于T,表达式结果不会改变。


内容的提问来源于stack exchange,提问作者Brondahl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:22:16