'result is T'与'typeof(T).IsInstanceOfType(result)'之间是否存在显着差异?

时间:2016-08-02 17:36:52

标签: c# types instance

以下两个语句都会测试某个对象x是否为T类型。是否应该注意性能方面的差异?

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

谢谢!

1 个答案:

答案 0 :(得分:4)

由于IsInstanceOfType是一种采用object的方法,因此值类型将被加框。另一方面,操作员is将不执行装箱。

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

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