'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
以下两个语句测试某个对象 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