我正在阅读有关如何强制操作引发溢出异常的信息,在“自己尝试”部分,我将它放在与书不同的地方。我很好奇是否存在与某个位置相关的性能问题,因为我不确定checked
关键字的基本机制。
书中的例子是做一个阶乘,它会很快抛出一个溢出,即使是一个无符号长。这是我想出的代码:
static long Factorial (long number) {
long result = 1;
for (int i = 2; i <= number; i++) {
checked {
result *= i;
}
}
return result;
}
但是,查看书后的答案页,他们checked
将整个函数体都包裹起来,包括return
and long result = 1;
。显然你在那些地方永远不需要一个,所以如果有的话,我会把for
循环包装在check
.
它是否存在于循环中导致重复生成一些底层 CLR 代码?(就像你为什么在进入 for 循环之前声明一个变量。)或者在循环中没有开销?