4

有人可以解释为什么会这样吗?

var y = new int[]{1,2};

Console.WriteLine(y is uint[]); // false
Console.WriteLine(((object)y) is uint[]); // true
4

1 回答 1

7

在 c# 中,您不能将 an 强制int转换为 a uint,因此第一个测试失败,因为它被编译为常量 false。

但是, CLR 允许进行int- >uint 强制转换。第二次检查不能由编译器推断,因此必须在运行时计算。由于您避开了编译器检查,因此 CLR 允许这样做。

于 2012-06-15T09:52:04.870 回答