这个比较会被编译成泛型类中的常量布尔值吗?

Tri*_*nko 1 c# generic-type-argument compile-time-constant compiler-optimization

typeof(T) == typeof(string)where T 是泛型类型参数编译为常量布尔值,因为条件在编译时是可知的?

Mar*_*ell 5

IL 中存在通用类型数据——它不像在 Java 中那样被擦除。所以:不,C# 编译器不会将其编译为常量;它编译它讨论泛型类型参数的 IL。

JIT然后在此被重新使用为所有引用类型排列(仅每个值型置换需要单独的JIT,对于大小/拳击/等原因)。由于string是引用类型,这意味着,Foo<string>(其中,typeof(T)==typeof(string)true)使用相同的JIT输出Foo<SomeClass>(其中,typeof(T)==typeof(string)false)。所以不:这显然不是常数,即使在 JIT 时间也是如此。