在C#中,我可以将一个数字(最多255个)直接分配给byte类型的变量:
byte red = 255;
但是,如果我使用条件运算符在更复杂的语句中执行此操作:
byte red = (redNode != null) ? byte.Parse(redNode.Value) : 255;
我收到错误:" CS0266无法隐式转换类型' int'到'字节'。存在显式转换(您是否错过了演员?)"。
我需要明确地为255执行转换为字节:
byte red = (redNode != null) ? byte.Parse(redNode.Value) : (byte)255;
为什么需要演员?
答案 0 :(得分:3)
C#中的数字文字是int
,而不是byte
。试试0xff
。
有no implicit conversion from int to byte,第一个语句byte red = 255;
是一个特例。
int类型的常量表达式可以转换为sbyte,byte, short,ushort,uint或ulong,提供常量的值 表达式在目标类型的范围内。
这并不能解释为什么它不会在第二个表达式中转换常量255,是吗?
它不需要在第二个表达式中转换255,因为there is an implicit conversion from byte to int。因此byte.Parse(redNode.Value)
会转换为int
。因此(redNode != null) ? byte.Parse(redNode.Value) : 255;
的类型为int
- 因为它不是常量表达式,所以不再隐式转换为byte
。
您认为错误消息要求您执行此操作:
byte red = (redNode != null) ? byte.Parse(redNode.Value) : (byte)255;
但它真的要求你这样做:
byte red = (byte)((redNode != null) ? byte.Parse(redNode.Value) : 255);