什么时候必须在C#中使用checked运算符?
什么时候必须在C#中使用checked
运算符?
它只适用于exception处理吗?
您可以使用checked
来防止表达式中的(静默)溢出。
当您知道可能发生无害溢出时,请使用unchecked
状态。
您可以在不希望依赖默认(项目范围)编译器设置的位置使用它们。
这两种forms都非常罕见,但在进行关键整数运算时,值得考虑可能的溢出。
另请注意,它们有两种forms:
x = unchecked(x + 1); // ( expression ) unchecked { x = x + 1;} // { statement(s) }
checked
将帮助您获取System.OverFlowException
,否则将不会被注意到
int result = checked (1000000 * 10000000); // Error: operation > overflows at compile time int result = unchecked (1000000 * 10000000); // No problems, compiles fine
来自已检查和未选中的运算符
checked和unchecked运算符用于控制整数类算术运算和转换的溢出检查上下文。
在已检查的上下文中,如果表达式生成的值超出目标类型的范围,则结果取决于表达式是常量还是非常量。 常量表达式导致编译时错误,而非常量表达式在运行时计算并引发exception。
在未经检查的上下文中,如果表达式生成的值超出目标类型的范围,则结果将被截断。
选中 , 未选中
在进行整数数学运算时, checked
与unchecked
也很有用。 特别是递增操作,你知道你将增加超过UInt32.MaxValue
,并希望它无害地溢出回0
。