以下两个语句都会测试某个对象x
是否为T
类型。是否应该注意性能方面的差异?
var result1 = x is T;
var result2 = typeof(T).IsInstanceOfType(x);
谢谢!
答案 0 :(得分:4)
由于IsInstanceOfType
是一种采用object
的方法,因此值类型将被加框。另一方面,操作员is
将不执行装箱。
当您在编译时知道T
时,使用第一种方法会更好,无论是作为特定类型还是泛型类型参数。第二种方法适用于代码在运行时获取类型的情况,因为第一种方法不适用:
Type typeKnownAtRuntime = ...
var result2 = typeKnownAtRuntime.IsInstanceOfType(x); // This works
var incorrect = x is typeKnownAtRuntime; // This does not compile