Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将布尔值转换为字节 此转换运行myByte=Convert.ToByte(myBool) 此转换不运行myByte=(byte)myBool_C# - Fatal编程技术网

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;