【问题标题】:Converting bool to byte将布尔转换为字节
【发布时间】:2012-06-18 07:32:07
【问题描述】:
bool myBool = true;
byte myByte;
  • 此转换运行myByte = Convert.ToByte(myBool);
  • 此转换未运行myByte = (byte)myBool;

对于新手(me):为什么以上不同?

【问题讨论】:

标签: c#


【解决方案1】:

Convert.ToByte 是一种方法——它可以为所欲为,大概是这样的:

return input ? (byte) 1 : (byte) 0;

演员表是一种语言级别的操作。它要求语言知道转换本身,或者所涉及的类型之一具有用户定义的转换以及正确的输入和输出类型。从bool 转换为byte 时,这两种情况都不是。

基本上,语言没有定义强制转换的含义,因此编译器禁止它。

【讨论】:

  • 为什么需要将 1/0 转换为 byte?实际上 ILSpy 说 ToByte 是通过以下方式实现的:if (!value) { return 0; } return 1;
  • @TimSchmelter:否则表达式的类型将是int,因此无法返回。不过这真的没关系 - 这些实现是等价的。
  • 我只是想知道为什么它在没有强制转换的情况下工作(当返回类型为byte 时),但我认为原因是int 可以转换为byteimplicitly。 (msdn.microsoft.com/en-us/library/5bdb6693%28v=vs.100%29.aspx)。
  • @TimSchmelter 没有从 intbyte 的隐式转换。但是,MSDN 声明了 int 的一个例外情况:“int 类型的常量表达式可以转换为 sbyte、byte、short、ushort、uint 或 ulong,提供 常量表达式的值在目标类型的范围内。"
猜你喜欢
  • 2016-01-28
  • 2012-03-02
  • 2014-10-11
  • 1970-01-01
  • 2022-06-12
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
相关资源
最近更新 更多