为了账号安全,请及时绑定邮箱和手机立即绑定

条件运算符不能隐式转换?

条件运算符不能隐式转换?

慕妹3146593 2019-07-02 11:12:52
条件运算符不能隐式转换?我被这个小小的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,并禁用隐式类型转换,否则您将从适合较小类型的常量中获得这种转换。


查看完整回答
反对 回复 2019-07-02
?
BIG阳

TA贡献1859条经验 获得超6个赞

我可能没有很好的答案给你,但如果你在许多地方这样做,你可以声明:

private static readonly Byte valueZero = (byte)0;private static readonly Byte valueOne = (byte)1;

只有这些变量。你可以通过使用const如果它是本地的项目。

编辑:使用readonly这是没有意义的-这些根本就不是要改变的。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 488 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信