“result is T”和“typeof(T).IsInstanceOfType(result)”之间有明显的区别吗?

3

以下两个语句都测试对象 x 是否为类型 T。从性能方面来说,是否有任何需要注意的区别?

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

谢谢!


哎呀!打错了。已更正。没有特定的用途,只是一个好奇心问题。 - Mark A. Donohoe
1
这个为什么被投票否决了? - Mark A. Donohoe
1个回答

4
IsInstanceOfType是一个接受object的方法,因此值类型将被装箱。而is操作符则不会执行装箱操作。
当你在编译时知道T,可以作为特定类型或泛型类型参数时,使用第一种方法更好。当你的代码在运行时获取类型时,应该使用第二种方法,因为第一种方法并不适用于这种情况:
Type typeKnownAtRuntime = ...
var result2 = typeKnownAtRuntime.IsInstanceOfType(x); // This works
var incorrect = x is typeKnownAtRuntime;   // This does not compile

1
你的意思是它被封装了。你可能需要详细说明一下,以便清楚为什么这是不好的。 - rory.ap
有没有使用IsInstanceOfType而不是is的理由?您刚刚为相反的情况提供了一个很好的例子,现在我想知道我为什么要使用前者。 - Mark A. Donohoe
实际上,你的编辑并没有解释为什么。你得到了哪些编译时支持?它仍然需要一个对象。你能详细说明一下吗? - Mark A. Donohoe
1
@MarqueIV 我添加了一个带有代码示例的例子,以说明何时IsInstanceOfType成为唯一可行的方法。 - Sergey Kalinichenko
讲解得非常清晰。谢谢!已接受。 - Mark A. Donohoe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接