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
檢查?
相似的文章在http://stackoverflow.com/questions/12237487/indexoutofrangeexception-in-indexed-getter和這裏http://stackoverflow.com/questions/383291/indexoutofrangeexception-for-an-ilistt – makemoney2010
爲什麼要麻煩?我同意奇怪的是,他們沒有使用相同的異常,甚至可能怪異的'ArgumentOutOfRangeException'文本說索引超出範圍,但我沒有看到這增加了很多價值。這些例外通常表示應該修復的程序錯誤。這個異常不應該被捕獲和「處理」 –
@sircodesalot將'try' ... catch'塊中的訪問封裝到'IndexOutOfRangeException'並拋出'ArgumentOutOfRangeException'會更好嗎? –