Best way to handle Integer overflow in C#?

前端 未结 6 437
臣服心动
臣服心动 2020-11-28 07:46

Handling integer overflow is a common task, but what\'s the best way to handle it in C#? Is there some syntactic sugar to make it simpler than with other languages? Or is th

6条回答
  •  被撕碎了的回忆
    2020-11-28 08:03

    I haven't needed to use this often, but you can use the checked keyword:

    int x = foo();
    int test = checked(x * common);
    

    Will result in a runtime exception if overflows. From MSDN:

    In a checked context, if an expression produces a value that is outside the range of the destination type, the result depends on whether the expression is constant or non-constant. Constant expressions cause compile time errors, while non-constant expressions are evaluated at run time and raise exceptions.

    I should also point out that there is another C# keyword, unchecked, which of course does the opposite of checked and ignores overflows. You might wonder when you'd ever use unchecked since it appears to be the default behavior. Well, there is a C# compiler option that defines how expressions outside of checked and unchecked are handled: /checked. You can set it under the advanced build settings of your project.

    If you have a lot of expressions that need to be checked, the simplest thing to do would actually be to set the /checked build option. Then any expression that overflows, unless wrapped in unchecked, would result in a runtime exception.

提交回复
热议问题