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

C#中Type对象==比较疑问:为何引用比较返回True?

关于C#中typeof与GetType()返回值的==比较问题

你的理解确实存在一处关键偏差,直接给结论:这段代码的输出True是完全正确的,核心原因是**typeof(string)和s.GetType()返回的是同一个Type对象实例**,并非两个不同的对象。

具体拆解说明:

  • 虽然Type属于引用类型,但.NET的CLR(公共语言运行时)对每一种托管类型,都会在内存中维护唯一的一个Type实例,这是CLR类型系统的核心特性之一。
  • typeof(string)是编译时确定的操作,它直接从CLR的类型元数据中获取string类型对应的那个唯一Type实例。
  • s.GetType()是运行时操作,它获取的是变量s实际指向对象的类型对应的Type实例——因为s是string类型的对象,所以拿到的还是同一个string类型的唯一Type实例。

所以当你用a1 == a2进行比较时,本质是对同一个引用进行比较,自然返回True。你甚至可以用object.ReferenceEquals(a1, a2)来验证,结果同样是True,足以证明两者指向的是同一个对象。

另外补充:Type类型还重写了Equals方法,即便极端场景下出现不同的Type实例(实际不会发生),Equals也会基于类型标识判断相等,但在这个场景里,连引用比较都直接成立了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:27:27