4
有人能解释为什么会发生这种情况吗?将一个int []投射到对象时,意外的操作符是/作为行为
var y = new int[]{1,2};
Console.WriteLine(y is uint[]); // false
Console.WriteLine(((object)y) is uint[]); // true
有人能解释为什么会发生这种情况吗?将一个int []投射到对象时,意外的操作符是/作为行为
var y = new int[]{1,2};
Console.WriteLine(y is uint[]); // false
Console.WriteLine(((object)y) is uint[]); // true
在C#中,你可以不投的int
到uint
,是因为它被编译成恒虚第一次测试失败。
但是,int-> uint cast 是由CLR允许的。第二个检查不能由编译器推断,因此必须在运行时进行计算。正如你逃避编译器检查,CLR允许它。
有点笨:http://stackoverflow.com/questions/593730/why-does-int-is-uint-true-in-c-sharp – Rawling
我相信第一个应该产生一个编译器警告[的确它*表达式永远不是提供的uint []类型*) – V4Vendetta
@Rawling感谢您的链接。 –