我无法理解这个错误:
在调用SetVolume方法时,Volume = 2055786000,size = 93552000。您可以看到,Volume是一个整数属性,而size也是整数。
该类是dbml实体类的部分类,但是这个Volume属性不是数据库中的列,它只存在于部分类中作为“业务对象属性”。
查看详细信息显示:
Data > Item:要评估索引属性,必须限定该属性,并且用户必须明确提供参数。
可能是什么原因呢?
我无法理解这个错误:
在调用SetVolume方法时,Volume = 2055786000,size = 93552000。您可以看到,Volume是一个整数属性,而size也是整数。
该类是dbml实体类的部分类,但是这个Volume属性不是数据库中的列,它只存在于部分类中作为“业务对象属性”。
查看详细信息显示:
Data > Item:要评估索引属性,必须限定该属性,并且用户必须明确提供参数。
可能是什么原因呢?
整数类型的最大值(带符号)为2147483647
。如果该值溢出,将抛出异常以防止程序出现意外行为。
如果不抛出该异常,则您的Volume
值将为-2145629296
,这很可能不是您想要的结果。
解决方案:使用Int64
类型作为您的音量类型。其最大值为9223372036854775807
,您可能更安全一些。
int.MaxValue = 2147483647
2055786000 + 93552000 = 2149338000 > int.MaxValue
所以你不能将这个数字存储到整数中。你可以使用Int64类型,它的最大值为9,223,372,036,854,775,807
。
为了简单起见,我将使用字节:
byte a=250;
byte b=8;
byte c=a+b;
byte a=250;
byte b=8;
byte c=(byte)((int)a + (int)b);
这样,'a'和'b'都被转换为'int'类型,相加后再转换回'byte'类型。
为了保险起见,您可能还想尝试:
...
byte c=(byte)(((int)a + (int)b) & 0xFF);
或者如果你真的想要那种行为,做以上操作的更简单方式是:
unchecked
{
byte a=250;
byte b=8;
byte c=a+b;
}
或者先声明你的变量,然后在“unchecked”部分进行数学运算。
或者,如果你想强制检查溢出,请使用“checked”。
希望这些能澄清问题。
Nurchi
P.S.
相信我,那个异常是你的朋友 :)
结果整数值超出了整数数据类型可以容纳的范围。
尝试使用Int64。
整数的最大值是2147483647,所以2055786000 + 93552000 > 2147483647,导致溢出
2055786000 + 93552000 = 2149338000,这个结果大于2^31。因此,如果您使用的是4字节编码的有符号整数,那么操作的结果将无法容纳并且会出现溢出异常。
int 的最大值为 2147483647。你可以使用 Int64/Long,它的范围更大。
当一个值因为除以零而返回为-1.#IND时,我遇到了这个错误。 关于C++中IEEE浮点异常的更多信息,请参见SO上的这里和John Cook的这里。
对于那些给这个答案投反对票(并没有说明原因)的人,这个答案之所以对某些人很重要,是因为除以零会导致一个无限大的数,从而产生一个不适合Int32(甚至Int64)的值。 因此,你收到的错误将是相同的(算术运算导致溢出),但原因略有不同。