【发布时间】:2011-12-16 19:38:23
【问题描述】:
考虑以下代码sn-p:
int index = FindClosestIndex(frame);
if (_data[index].Frame == frame)
return _data[index];
else
return interpolateData(frame, _data[index - 1], _data[index]);
现在,在这种情况下,我在此代码块之前进行了一些检查,以确保 FindClosestIndex() 永远不会返回 0。这应该是不可能的。但是,FindClosestIndex 中的逻辑有些复杂,因此很可能在一些没有人预料到的罕见极端情况下尚未发现错误,即使我的代码是正确的,FindClosestIndex 也可能错误地返回 0。
如果它确实返回 0,我将在 _data[index - 1] 语句上收到 ArgumentOutOfRangeException。我可以让这个异常冒泡,但我宁愿这样做:
if (index == 0)
throw new ApplicationLogicException("There is a bug that caused FindClosestIndex to return an int <= 0 when it shouldn't have.");
如果您的代码检测到错误状态,您会推荐这种抛出自定义异常的做法吗?遇到这种情况怎么办?
【问题讨论】:
标签: exception fault-tolerance error-detection