14

我们什么时候必须checked在 C# 中使用运算符?
它只适用于异常处理吗?

4

4 回答 4

14

您将使用它checked来防止表达式中的(静默)溢出。当您知道可能会发生无害的溢出时
使用。unchecked

您可以在不想依赖默认(项目范围)编译器设置的地方使用两者。

这两种形式都非常罕见,但在进行关键整数运算时,值得考虑可能的溢出。

另请注意,它们有两种形式:

 x = unchecked(x + 1);    // ( expression )
 unchecked { x = x + 1;}  // { statement(s) }
于 2010-03-02T14:42:38.520 回答
6

checked将帮助您捡起System.OverFlowException那些会被忽视的东西

int result = checked (1000000 * 10000000);   
    // Error: operation > overflows at compile time

int result = unchecked (1000000 * 10000000);  
    // No problems, compiles fine
于 2010-03-02T14:43:15.070 回答
3

From The checked 和 unchecked 运算符

检查和未检查运算符用于控制整数类型算术运算和转换的溢出检查上下文。

在检查的上下文中,如果表达式产生的值超出目标类型的范围,则结果取决于表达式是常量还是非常量。常量表达式会导致编译时错误,而非常量表达式会在运行时求值并引发异常。

在未经检查的上下文中,如果表达式产生的值超出目标类型的范围,则结果将被截断。

选中未选中

于 2010-03-02T14:39:37.730 回答
3

checkedvs.unchecked在你做整数数学的时候也很有用。特别是递增操作,您知道您将递增过去UInt32.MaxValue,并希望它无害地溢出回0

于 2010-03-02T14:52:46.473 回答