1

考虑以下代码片段:

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。

_data[index - 1]如果它确实返回 0,我将在语句中得到 ArgumentOutOfRangeException 。我可以让那个异常冒泡,但我宁愿这样做:

if (index == 0)
    throw new ApplicationLogicException("There is a bug that caused FindClosestIndex to return an int <= 0 when it shouldn't have.");

如果您的代码检测到错误状态,您会推荐这种抛出自定义异常的做法吗?当你遇到这样的情况时,你会怎么做?

4

1 回答 1

1

就个人而言,我确实包含了这样的自定义异常。这就像避孕套的争论:拥有它而不需要它比需要它而不拥有它要好。如果在极少数情况下确实发生了这种情况,包括自定义异常消息将使跟踪逻辑错误变得更加容易,但您的可执行文件只是稍微大一点。否则,您的 ArgumentOutOfRangeException 可能发生在任何地方。添加异常所花费的时间远远超过在没有它的情况下跟踪错误所花费的时间。

于 2011-10-27T19:58:29.737 回答