如果我在checked
上下文中,如果我没有导致/捕获OverflowException
而导致性能下降,我怎样才能找到使用C#代码?
答案 0 :(得分:4)
checked
与unchecked
的块之间的唯一区别是编译器为基本值类型算术运算生成的IL指令。换句话说,以下内容之间没有可观察到的差异:
checked {
myType.CallSomeMethod();
}
和
myType.CallSomeMethod();
但是我们假设有一个算术运算,比如添加两个整数。您需要获取该方法的IL指令,并检查是否检查了方法调用周围的指令,即使这样也远非防弹。您无法判断您的自定义操作是否实际位于已检查的块中,或者只是被选中的块包围,而不是在其中。
即使捕获异常也行不通,因为您无法区分这两种情况:
checked {
int a = (Some expression that overflows);
myType.CallSomeMethod();
}
和
checked {
int a = (Some expression that overflows);
}
myType.CallSomeMethod();
这可能是Decimal
类型未尝试检测checked
与unchecked
并且始终抛出OverflowException
的原因的一部分。