有没有人能解释我这种奇怪的行为?
int i = 0x1234;
byte b1 = (byte)i;
byte b2 = (byte)0x1234; //error: const value '4660' can't convert to byte (use unchecked)
byte b3 = unchecked((byte)0x1234);
byte b4 = checked((byte)i); //throws
byte b5 = (byte)(int)0x1234; //error: same as above
注意:这是一个空的控制台应用程序,没有启用算术检查(默认情况下)。提前谢谢大家。
编辑:我应该足够清楚,但不是全部。
我知道一个字不能装进一个字节。但是,默认情况下,C# 程序允许某些“危险”操作,主要是出于性能原因。
同样,我可以将两个大整数相加,并且完全没有溢出。
我想知道上面的编译时错误:b1 cast/assignment 已编译,b2 无法编译。显然没有区别,因为两者都是 Int32 具有相同的值。
希望现在很清楚。