在';结果是T';vs';(T)的类型.IsInstanceOfType(结果)';

本文关键字:结果 类型 IsInstanceOfType vs 结果是 | 更新日期: 2023-09-27 17:59:54

以下两个语句都测试某个对象x是否属于T类型。在性能方面有什么区别吗?

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

谢谢!

在';结果是T';vs';(T)的类型.IsInstanceOfType(结果)';

由于IsInstanceOfType是一个接受object的方法,因此值类型将被装箱。另一方面,操作员is将不执行装箱操作。

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

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