2011-10-27 96 views
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.

如果它返回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."); 

你會建議,如果你的代碼檢測到錯誤狀態拋出一個自定義異常的這種做法?當你有這樣的情況時你做什麼?

回答

1

就我個人而言,我確實包含這樣的自定義例外。這就像避孕套的論點:擁有它並不需要它,而不是需要它而不是它。如果發生這種情況的情況很少,包括自定義異常消息將使得更容易跟蹤邏輯錯誤,但是您的可執行文件只是稍大一點。否則,你的ArgumentOutOfRangeException可能發生在任何地方。您添加異常所花的時間遠遠超過您在沒有它的情況下追蹤錯誤所花費的時間。