如何使用C#代码找出是否处于checked
上下文中而不会导致/捕捉到OverflowException
,而导致性能下降?
checked
vs块之间的唯一区别是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
vsunchecked
而始终抛出的原因的一部分OverflowException
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句