Why don't I get an exception on integer (uint) under/overflow?
我今天偶然发现了这个。 这应该发生吗? 这是我们所有人都应该注意的事情吗?
由于这是一个无符号整数,我应该不会出错?
1 2 3
| uint foo = 10;
foo = foo - 35;
Console.WriteLine(foo); |
输出:4294967271
-
uint表示unsigned int
-
我本来希望得到一个错误-我是否应该得到一个错误?
-
Is this something we should all be warned about?应该理解,默认情况下,C#使用未经检查的上下文。这样就可以进行此类包装。如果需要错误/警告,请更改项目配置以默认使用选中的上下文,或使用checked关键字。
-
是的,应该警告您。不要犹豫,启用该警告。项目>属性>生成选项卡>高级按钮>选中"检查算术上溢/下溢"复选框。
-
当询问有关您不希望发生的事情的问题时,请说出您希望在问题中发生的事情。另外,显示您的研究。而且,最后要指出的是您的代码,而不是您使用的语言或框架,因此我删除了" .NET BUG?"。从你的头衔,如果你不介意。
-
是否有最佳做法的原因,为什么默认情况下不会选中"检查算术上溢/下溢"复选框?是否有充分的理由不进行检查?通常,我对数据验证非常好...有时候我们都会犯错。
-
@Scott,请尝试搜索。请参见为什么C#默认不使用算术溢出检查?为什么默认情况下语言不会在整数溢出时引发错误?
-
我确实在发布前搜索了答案,但没有找到答案,我猜那是因为我搜索的是uint而不是整数
您有算术溢出,只需启用Buid-Advanced-Check进行算术...,您将得到以下异常: