C# 将布尔值转换为字节 此转换运行myByte=Convert.ToByte(myBool) 此转换不运行myByte=(byte)myBool
对于新手(C# 将布尔值转换为字节 此转换运行myByte=Convert.ToByte(myBool) 此转换不运行myByte=(byte)myBool,c#,C#,对于新手(me):为什么上面的不同 Convert.ToByte是一种方法-它可以做任何它想做的事情,可能遵循以下原则: bool myBool = true; byte myByte; 强制转换是一种语言级操作。它要求语言了解转换本身,或者所涉及的某个类型具有用户定义的转换,并具有正确的输入和输出类型。当从bool转换为byte时,这两种情况都不会发生 基本上,该语言没有定义强制转换的含义,因此编译器禁止它。看看这里,为什么需要将1/0强制转换为字节?实际上,ILSpy说,ToByte是通过
me
):为什么上面的不同 Convert.ToByte
是一种方法-它可以做任何它想做的事情,可能遵循以下原则:
bool myBool = true;
byte myByte;
强制转换是一种语言级操作。它要求语言了解转换本身,或者所涉及的某个类型具有用户定义的转换,并具有正确的输入和输出类型。当从bool
转换为byte
时,这两种情况都不会发生
基本上,该语言没有定义强制转换的含义,因此编译器禁止它。看看这里,为什么需要将1/0强制转换为
字节
?实际上,ILSpy说,ToByte
是通过以下方式实现的:if(!value){return 0;}return 1
@TimSchmelter:否则表达式的类型将是int
,因此无法返回。不过这真的没关系——这些实现是等效的。我只是想知道为什么它不强制转换(当返回类型为byte
时)就可以工作,但我假设原因是int
可以隐式转换为byte
。()。@TimSchmelter没有从int
到byte
的隐式转换。但是,声明了int的一个例外情况:“int类型的常量表达式可以转换为sbyte、byte、short、ushort、uint或ulong,前提是常量表达式的值在目标类型的范围内。”
return input ? (byte) 1 : (byte) 0;