考慮下面的代碼片段:檢測自己的錯誤的代碼?
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.");
你會建議,如果你的代碼檢測到錯誤狀態拋出一個自定義異常的這種做法?當你有這樣的情況時你做什麼?