C# 由于某种原因,字节乘以字节等于int。为什么?无法将类型“int”隐式转换为“byte”。存在显式转换

C# 由于某种原因,字节乘以字节等于int。为什么?无法将类型“int”隐式转换为“byte”。存在显式转换,c#,.net,casting,type-conversion,C#,.net,Casting,Type Conversion,我有这个代码,但由于某种原因它不起作用。我不明白。怎么了 byte dog = (byte)2*byte.Parse("2"); 我在LinqPad中遇到此异常:无法将类型“int”隐式转换为“byte”。存在显式转换。是否缺少强制转换 还有,写这段代码的正确方法是什么?谢谢。将一个字节值与另一个字节值相乘,在大多数可能的结果中,会得到一个不适合一个字节的值。最极端的情况是最大值乘积255*255——当每个因子都适合一个字节时,乘积需要一个整数来适合。所有关于sbyte、byte、ushort

我有这个代码,但由于某种原因它不起作用。我不明白。怎么了

byte dog = (byte)2*byte.Parse("2");
我在LinqPad中遇到此异常:无法将类型“int”隐式转换为“byte”。存在显式转换。是否缺少强制转换


还有,写这段代码的正确方法是什么?谢谢。

将一个字节值与另一个字节值相乘,在大多数可能的结果中,会得到一个不适合一个字节的值。最极端的情况是最大值乘积255*255——当每个因子都适合一个字节时,乘积需要一个整数来适合。

所有关于sbyte、byte、ushort和short的算术运算都被加宽到int。 例如,第三行将给出编译器错误:

byte b1 = 1;
byte b2 = 2;
byte b3 = (b1 * b2); // Exception, Cannot implicitly convert type 'int' to 'byte
byte b4 = (byte)(b1 * b2); // everything is fine
因此,将代码更改为:

byte dog = (byte)((byte)2*byte.Parse("2"));

有关详细信息:

这是因为,从编译器的观点来看,您试图将第一个乘法器转换为字节,而不是整个结果。这是因为在c中

试试这个:

byte dog = (byte) (2*byte.Parse("2"));
您还应该注意,您可以得到一个大于常数255的整数,这样的类型转换会丢失数据。

try byte dog=byte2*byte.Parse2;