Exception 检测自身bug的代码?

Exception 检测自身bug的代码?,exception,fault-tolerance,error-detection,Exception,Fault Tolerance,Error Detection,考虑以下代码段: int index = FindClosestIndex(frame); if (_data[index].Frame == frame) return _data[index]; else return interpolateData(frame, _data[index - 1], _data[index]); 现在,在本例中,我在这个代码块之前做了一些检查,以确保findclosestinex()永远不会返回0。这应该是不可能的。然而,findclose

考虑以下代码段:

int index = FindClosestIndex(frame);
if (_data[index].Frame == frame)
    return _data[index];
else
    return interpolateData(frame, _data[index - 1], _data[index]);
现在,在本例中,我在这个代码块之前做了一些检查,以确保
findclosestinex()
永远不会返回0。这应该是不可能的。然而,
findclosestinex
中的逻辑有些复杂,因此很可能在一些罕见的、没有人预料到的情况下还没有发现bug,即使我的代码是正确的,
findclosestinex
也可能错误地返回0

如果它返回0,我将在
\u 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.");
if(索引==0)

抛出新的ApplicationLogiceException("有一个bug导致FindClosestIndex个人返回int,我确实包含了这样的自定义异常。这就像避孕套参数:拥有它而不需要它比拥有它而不需要它要好。如果在罕见的情况下确实发生了,包含自定义异常消息将使跟踪逻辑错误变得如此困难更简单,但是你的可执行文件只大一点点。否则,你的ArgumentOutOfRangeException可能会发生在任何地方。添加异常所需的时间远远超过不添加异常跟踪错误所需的时间。

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