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

时间:2015-01-25 09:53:59

标签: c# .net casting type-conversion

我有这个代码,但由于某种原因它没有用。我不明白。有什么问题?

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

我在LinqPad中得到了这个例外:"无法隐式转换类型' int'到'字节'。存在显式转换(您是否错过了演员?)。"

编写此代码的正确方法是什么?感谢。

3 个答案:

答案 0 :(得分:2)

将一个字节值与另一个字节值相乘将对大多数可能的结果呈现一个不适合一个字节的值。极端情况是最大值乘积255 * 255 - 虽然每个因子都适合一个字节,但产品需要一个整数来适应。

答案 1 :(得分:2)

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"));

了解更多信息Look at this SO question

答案 2 :(得分:0)

那是因为,从编纂者的意见来看,你只是试图转向只有byte的第一个乘数,而不是整个结果。这是因为c#中的operators precedence

试试这个:

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

另外你应该注意到你可以得到一个大于maximum byte value的整数(这是一个等于255的const,并且这种类型转换会导致数据丢失。