如何使用C#的三元运算符和两个字节值?

似乎没有办法在两个字节上使用C#的三元运算符,如下所示:

byte someByte = someBoolean ? 0 : 1; 

该代码目前无法使用“无法将源类型’int’转换为目标类型’byte’”进行编译,因为编译器将数字视为整数。 显然没有指定的后缀表示0和1是字节,因此唯一的解决方法是(a)将结果转换为字节或(b)使用if-else控件。

有什么想法吗?

 byte someByte = someBoolean ? (byte)0 : (byte)1; 

演员阵容在这里不是问题,事实上,IL代码根本不应该有演员阵容。

编辑:生成的IL看起来像这样:

 L_0010: ldloc.0 // load the boolean variable to be checked on the stack L_0011: brtrue.s L_0016 // branch if true to offset 16 L_0013: ldc.i4.1 // when false: load a constant 1 L_0014: br.s L_0017 // goto offset 17 L_0016: ldc.i4.0 // when true: load a constant 0 L_0017: stloc.1 // store the result in the byte variable 

你可以随时做:

 var myByte = Convert.ToByte(myBool); 

这将产生myByte == 0表示false,myByte == 1表示true。

 byte someByte = (byte)(someBoolean ? 0 : 1); 

在VS2008上编译好。

更正 :这在VS2008中编译正常:

 byte someByte = true ? 0 : 1; byte someByte = false ? 0 : 1; 

但这不是:

 bool someBool = true; byte someByte = someBool ? 0 : 1; 

奇!

编辑 :按照Eric的建议(见下面的评论),我试过这个:

 const bool someBool = true; byte someByte = someBool ? 0 : 1; 

它编译得很完美。 不是我不相信埃里克; 为了完整起见,我只是想把它包含在这里。