int x = foo();
int test = x * common;
if(test / common != x)
Console.WriteLine("oh noes!");
else
Console.WriteLine("safe!");
int x = foo() ;
int test = checked(x * common);
If it overflows, it will cause a runtime exception. 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, and of course not checked Instead and ignore the overflow. You may wonder when to use the unchecked state because it seems to be the default behavior. Well, there is a C# compiler option that defines how to handle expressions other than checked and unchecked: /checked. You can set it under the advanced build settings of the project.
If you have a lot of expressions that need to be checked, the easiest thing is to set the /checked build option. Then, any overflow expressions, unless not After checking the package, otherwise it will cause runtime exception.
Handling integer overflow is a common task, but what is the best way to handle it in C#? Are there some syntactic sugars that are simpler than other languages? Or is this really the best way?
int x = foo();
int test = x * common;
if(test / common != x)
Console.WriteLine("oh noes!");
else
Console.WriteLine("safe!");
I don’t need to use it often, but you can use the checked keyword:
int x = foo();
int test = checked(x * common);
If it overflows, it will cause runtime exceptions. 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, of course the opposite of checking and ignoring overflows. You may wonder when to use Unchecked because it seems to be the default behavior. Well, there is a C# compiler option that defines how to handle expressions other than checked and unchecked: /checked. You can set it under the advanced build settings of the project.
If you have a lot of expressions that need to be checked, the simplest thing is to set the /checked build option. Then, any overflowing expression, unless wrapped without checking, will cause a runtime exception. < /p>