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

时间:2014-09-20 22:14:50

标签: c# casting hex byte ternary-operator

例如:

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

为什么会这样?

1 个答案:

答案 0 :(得分:2)

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

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