【发布时间】:2012-06-18 07:32:07
【问题描述】:
bool myBool = true;
byte myByte;
- 此转换运行
myByte = Convert.ToByte(myBool); - 此转换未运行
myByte = (byte)myBool;
对于新手(me):为什么以上不同?
【问题讨论】:
标签: c#
bool myBool = true;
byte myByte;
myByte = Convert.ToByte(myBool);
myByte = (byte)myBool; 对于新手(me):为什么以上不同?
【问题讨论】:
标签: c#
Convert.ToByte 是一种方法——它可以为所欲为,大概是这样的:
return input ? (byte) 1 : (byte) 0;
演员表是一种语言级别的操作。它要求语言知道转换本身,或者所涉及的类型之一具有用户定义的转换以及正确的输入和输出类型。从bool 转换为byte 时,这两种情况都不是。
基本上,语言没有定义强制转换的含义,因此编译器禁止它。
【讨论】:
byte?实际上 ILSpy 说 ToByte 是通过以下方式实现的:if (!value) { return 0; } return 1;
int,因此无法返回。不过这真的没关系 - 这些实现是等价的。
byte 时),但我认为原因是int 可以转换为byteimplicitly。 (msdn.microsoft.com/en-us/library/5bdb6693%28v=vs.100%29.aspx)。
int 到 byte 的隐式转换。但是,MSDN 声明了 int 的一个例外情况:“int 类型的常量表达式可以转换为 sbyte、byte、short、ushort、uint 或 ulong,提供 常量表达式的值在目标类型的范围内。"