处理整数溢出是一项常见任务,但在 C# 中处理它的最佳方法是什么?是否有一些语法糖可以使其比其他语言更简单?或者这真的是最好的方法吗?
int x = foo();
int test = x * common;
if(test / common != x)
Console.WriteLine("oh noes!");
else
Console.WriteLine("safe!");
我不需要经常使用这个,但你可以使用checked https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/checked关键词:
int x = foo();
int test = checked(x * common);
如果溢出将导致运行时异常。来自 MSDN:
在检查的上下文中,如果表达式生成的值是
在目标类型的范围之外,结果取决于
表达式是常量还是非常量。持续的
表达式会导致编译时错误,而非常量表达式
在运行时评估并引发异常。
我还应该指出,还有另一个 C# 关键字,unchecked
,这当然是相反的checked
并忽略溢出。你可能想知道你什么时候使用过unchecked
因为它似乎是默认行为。嗯,有一个 C# 编译器选项定义了外部表达式如何checked
and unchecked
被处理:/checked https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/checked-compiler-option。您可以在项目的高级构建设置下进行设置。
如果您有很多表达式需要检查,最简单的做法实际上是设置/checked
构建选项。然后任何溢出的表达式,除非包含在unchecked
,会导致运行时异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)