2014-04-29 45 views
2

我已將一個新類添加到我的庫中,該類將成爲公共記錄的API的一部分。底層數據結構是本地數組,但在首次生成本地數組時使用List<T>ArgumentOutOfRangeException和IndexOutOfRangeException的性能

MSDN指示List<T>拋出ArgumentOutOfRangeException而不是IndexOutOfRangeException(可以在訪問本機陣列時拋出該錯誤)。

所以我打算更新我的功能一直是我記錄的API中拋出ArgumentOutOfRangeException的一致性像如下:

public class MyClass { 
    private int[] _values; 

    public int GetValue(int index) { 
     if (index < 0 || index >= _values.Length) 
      throw new ArgumentOutOfRangeException("index"); 
     return _values[index]; 
    } 
} 

我的問題是這樣的:

將上述源產生兩個範圍檢查(我一個+本地數組一個),還是.NET編譯器足夠聰明,可以刪除IndexOutOfRangeException檢查?

+0

相似的文章在http://stackoverflow.com/questions/12237487/indexoutofrangeexception-in-indexed-getter和這裏http://stackoverflow.com/questions/383291/indexoutofrangeexception-for-an-ilistt – makemoney2010

+3

爲什麼要麻煩?我同意奇怪的是,他們沒有使用相同的異常,甚至可能怪異的'ArgumentOutOfRangeException'文本說索引超出範圍,但我沒有看到這增加了很多價值。這些例外通常表示應該修復的程序錯誤。這個異常不應該被捕獲和「處理」 –

+0

@sircodesalot將'try' ... catch'塊中的訪問封裝到'IndexOutOfRangeException'並拋出'ArgumentOutOfRangeException'會更好嗎? –

回答

2

爲什麼要麻煩?我同意奇怪的是,他們沒有使用相同的例外情況,甚至可能是怪異的,ArgumentOutOfRangeException的文字表示該索引超出範圍,但我不認爲這增加了很多價值。

這些異常通常表示應該修復的程序錯誤。異常不應該被捕獲和「處理」。

相關問題