将布尔值转换为字节

4
bool myBool = true;
byte myByte;
  • 这个转换函数是 myByte = Convert.ToByte(myBool);
  • 这个转换函数不是 myByte = (byte)myBool;

对于初学者(如我):为什么以上两种方式不同?


请看这里:https://dev59.com/EWDVa4cB1Zd3GeqPbkEd - V4Vendetta
1个回答

10

Convert.ToByte是一个方法,它可以做任何它想做的事情,可能是以下几种方式:

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

强制类型转换是一种语言级别的操作。它要求语言本身知道转换的方式,或者涉及到的其中一个类型具有正确的输入和输出类型的用户定义转换。当从bool转换为byte时,这两种情况都不适用。

基本上,语言没有定义该转换应该意味着什么,因此编译器会禁止它。


1
你为什么需要将1/0强制转换为“byte”?实际上,ILSpy表示“ToByte”的实现方式如下:if (!value) { return 0; } return 1; - Tim Schmelter
@TimSchmelter: 否则表达式的类型将是int,因此无法返回。但实际上并不重要 - 这些实现是等效的。 - Jon Skeet
我只是想知道为什么在返回类型为byte时不需要进行强制转换,但我猜测原因是int可以隐式地转换为byte。(http://msdn.microsoft.com/en-us/library/5bdb6693%28v=vs.100%29.aspx) - Tim Schmelter
1
@TimSchmelter,从intbyte没有隐式转换。然而,MSDN指出了一个特殊情况:类型为int的常量表达式可以转换为sbyte、byte、short、ushort、uint或ulong,前提是常量表达式的值在目标类型的范围内。 - Eren Ersönmez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接