The C# Language Specification says this:
For non-constant expressions (expressions that are evaluated at
run-time) that are not enclosed by anychecked
orunchecked
operators
or statements, the default overflow checking context isunchecked
unless external factors (such as compiler switches and execution
environment configuration) call forchecked
evaluation.
The reason for this choice is probably performance. I agree that this decision leads to errors among those who are not aware of “silent” integer overflow.
If your C# files belong to a C# project file (*.csproj
), then that file holds configuration of the “default” overflow checking context. To changed it, see To set this compiler option in the Visual Studio development environment in this page.
If you don’t use .csproj
files, you’re probably compiling everything from the command line, and then the above page tells you what command line option to use to set the default overflow checking context.