'result is T' 与 'typeof(T).IsInstanceOfType(result)' 之间有显着差异吗?

Is there a notable difference between 'result is T' vs 'typeof(T).IsInstanceOfType(result)'?

以下两个语句测试某个对象 x 是否属于 T 类型。在性能方面应该注意哪些差异?

var result1 = x is T;
var result2 = typeof(T).IsInstanceOfType(x);

谢谢!

因为 IsInstanceOfType 是一个采用 object 的方法,值类型将被装箱。另一方面,运算符 is 不会执行装箱。

当您在编译时知道 T 时,使用第一种方法更好,无论是作为特定类型还是泛型类型参数。第二种方法适用于代码在 运行 时获取类型的情况,因为第一种方法不适用:

Type typeKnownAtRuntime = ...
var result2 = typeKnownAtRuntime.IsInstanceOfType(x); // This works
var incorrect = x is typeKnownAtRuntime;   // This does not compile