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