我如何使用 C# 代码知道我是否处于checked
无论是否有上下文,都不会导致/捕获OverflowException
,会带来性能损失吗?
块之间的唯一区别是checked
vs unchecked
是编译器生成的用于基本值类型算术运算的IL指令。换句话说,以下各项之间没有明显的差异:
checked {
myType.CallSomeMethod();
}
and
myType.CallSomeMethod();
但是假设有一个算术运算,例如将两个整数相加。您需要获取该方法的 IL 指令,并检查您的方法调用周围的指令是否已检查,即使这也远非万无一失。您无法判断您的自定义操作是否实际上位于检查块内,或者只是被不在内部的检查块包围。
即使捕获异常也不起作用,因为您无法区分这两种情况:
checked {
int a = (Some expression that overflows);
myType.CallSomeMethod();
}
and
checked {
int a = (Some expression that overflows);
}
myType.CallSomeMethod();
这可能是为什么Decimal
类型不尝试检测checked
vs unchecked
而总是抛出OverflowException
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)