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

C#运行时是否会对内置类型的typeof值进行缓存?

.NET 中 typeof 运算符的求值缓存机制

结论:你不需要手动用static变量存储typeof(内置类型)的结果,运行时默认已经做了全局缓存,重复调用不会产生额外的求值开销。

具体原理如下:

  • typeof是编译期解析的运算符,C#编译器会把typeof(T)的调用编译为调用Type.GetTypeFromHandle(RuntimeTypeHandle)方法,传入的是T对应的固定运行时类型句柄,不需要每次执行时动态扫描类型元数据。
  • .NET 运行时对同一个AppDomain内加载的每个类型,只会生成唯一的Type实例,不管你调用多少次typeof(T),拿到的都是同一个对象的引用,不会重复构建Type对象。

你可以通过下面的代码验证这个特性:

var t1 = typeof(int);
var t2 = typeof(int);
// 输出为True,说明两次调用拿到的是同一个对象
Console.WriteLine(ReferenceEquals(t1, t2));

补充说明

如果是非常极端的性能敏感场景,你手动定义static readonly Type IntType = typeof(int);也不会有问题,但是收益非常有限:原生typeof调用的开销已经低到纳秒级,绝大多数场景下感知不到差异。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:39:05