为什么List.IndexOf
允许超出范围的起始索引?
var list = new List<int>() { 100 };
Console.WriteLine(list.IndexOf(1/*item*/, 1/*start index*/));
不会有任何例外。但此集合中没有具有1
索引的项目!只有一项具有0
索引。那么,为什么.Net
允许你这样做呢?
发布于 2016-02-21 06:53:12
我想,我明白为什么。像这样的方法更容易实现。看:
public int IndexOf(T item, int index)
{
if (index > this._size)
{
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.index, ExceptionResource.ArgumentOutOfRange_Index);
}
return Array.IndexOf<T>(this._items, item, index, this._size - index);
}
此方法重载使用另一个更常见的重载:
return Array.IndexOf<T>(this._items, item, index, this._size - index);
因此,此方法也使用它:
public int IndexOf(T item)
所以这段代码没有意义:
var list = new List<int>(); /*empty!*/
Console.WriteLine(list.IndexOf(1/*item*/));
将抛出一个Exception
。但是,如果不承认这一点,就无法使用通用重载来使用这种IndexOf
重载。
https://stackoverflow.com/questions/35529145
复制相似问题