以下两个语句都测试对象 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
IsInstanceOfType
而不是is
的理由?您刚刚为相反的情况提供了一个很好的例子,现在我想知道我为什么要使用前者。 - Mark A. DonohoeIsInstanceOfType
成为唯一可行的方法。 - Sergey Kalinichenko