bool myBool = true;
byte myByte;
- 这个转换函数是
myByte = Convert.ToByte(myBool);
- 这个转换函数不是
myByte = (byte)myBool;
对于初学者(如我):为什么以上两种方式不同?
bool myBool = true;
byte myByte;
myByte = Convert.ToByte(myBool);
myByte = (byte)myBool;
对于初学者(如我):为什么以上两种方式不同?
Convert.ToByte
是一个方法,它可以做任何它想做的事情,可能是以下几种方式:
return input ? (byte) 1 : (byte) 0;
强制类型转换是一种语言级别的操作。它要求语言本身知道转换的方式,或者涉及到的其中一个类型具有正确的输入和输出类型的用户定义转换。当从bool
转换为byte
时,这两种情况都不适用。
基本上,语言没有定义该转换应该意味着什么,因此编译器会禁止它。
if (!value) { return 0; } return 1;
- Tim Schmelterint
,因此无法返回。但实际上并不重要 - 这些实现是等效的。 - Jon Skeetbyte
时不需要进行强制转换,但我猜测原因是int
可以隐式地转换为byte
。(http://msdn.microsoft.com/en-us/library/5bdb6693%28v=vs.100%29.aspx) - Tim Schmelterint
到byte
没有隐式转换。然而,MSDN指出了一个特殊情况:类型为int的常量表达式可以转换为sbyte、byte、short、ushort、uint或ulong,前提是常量表达式的值在目标类型的范围内。 - Eren Ersönmez