c# – 使用三元运算符时,为什么要显式地将十六进制值转换为字节?

例如:

byte a = 0x01; // Works fine
byte b = foo() ? 0x01 : 0x02; // Get error "Cannot impicitly convert int to byte"

为什么会这样?

最佳答案 当您为byte类型的变量分配数字文字(无论是十六进制还是十进制)时,编译器会检查该值是否适合一个字节.一旦编译器知道该值适合,它就会将文字视为字节类型,与变量的类型相匹配.

但是,当您使用三元表达式时,编译器不再确定表达式的值是什么.默认情况下,它将条件表达式中的值视为整数文字,因为没有类型转换.因此,编译器看到的是将非常量int表达式赋值给byte类型的变量.这会触发您看到的错误.

点赞