条件运算符不能隐式转换?我被这个小小的C#怪癖弄糊涂了:给定变量:Boolean aBoolValue;Byte aByteValue;以下是汇编:if (aBoolValue)
aByteValue = 1; else
aByteValue = 0;但这不会:aByteValue = aBoolValue ? 1 : 0;错误说:“不能隐式地将‘int’类型转换为‘字节’。”当然,这个怪物会汇编成:aByteValue = aBoolValue ? (byte)1 : (byte)0;这里发生了什么事?编辑:使用VS 2008,C#3.5
3 回答
猛跑小猪
TA贡献1858条经验 获得超8个赞
我使用VS 2005,for和我可以复制,用于bool&boole,但不用于true
bool abool = true;
Boolean aboolean = true;
Byte by1 = (abool ? 1 : 2); //Cannot implicitly convert type 'int' to 'byte'
Byte by2 = (aboolean ? 1 : 2); //Cannot implicitly convert type 'int' to 'byte'
Byte by3 = (true ? 1 : 2); //Warning: unreachable code ;)
最简单的解决办法似乎是这个演员。
Byte by1 = (Byte)(aboolean ? 1 : 2);
因此,是的,似乎三元操作符导致常量将它们的类型“修正”为INT,并禁用隐式类型转换,否则您将从适合较小类型的常量中获得这种转换。
BIG阳
TA贡献1859条经验 获得超6个赞
private static readonly Byte valueZero = (byte)0;private static readonly Byte valueOne = (byte)1;
const
编辑:readonly
- 3 回答
- 0 关注
- 510 浏览
添加回答
举报
0/150
提交
取消