C#中List为什么要提供FindIndex和IndexOf两个方法?
这两个方法对比有什么优劣?
// 定义
public int FindIndex(Predicate<T> match);
public int FindIndex(int startIndex, Predicate<T> match);
public int FindIndex(int startIndex, int count, Predicate<T> match);
public int IndexOf(T item, int index, int count);
public int IndexOf(T item, int index);
public int IndexOf(T item);
// 使用
int index = keys.FindIndex(x => x == key);
int index = keys.IndexOf(key);
这是有历史原因的。在C#1.0中,只有IndexOf
C# 2.0里觉得这个功能不灵活,只能匹配整个对象,比如说要查找某个元素的属性等于某个值,就不行了。于是加上了FindIndex
到了C# 3.0时代,觉得FindIndex又不行,只能作用于List,所以有了LINQ,有了Where
但是,我们必须保证程序向前兼容啊,不能因为有了新的,就不支持旧的,不然原有的程序怎么升级呢?所以看似重复的功能被保留了下来。