我想在降序列表中找到元素索引,但BinarySearch返回一个负数。为什么会这样?这是我的代码片段:
List<int> list = new List<int>();
list.Add(4);
list.Add(1);
list.Add(5);
list.Add(2);
list.Add(3);
list.Sort();
list.Reverse();
var elementIndex = list.BinarySearch(5);
问题出在默认比较器中,它希望列表只按升序排序。如果要在按降序排序的列表上使用BinarySearch,则应实现IComparer接口。例如:
class ReverseComparer : IComparer<int>
{
public int Compare(int x, int y)
{
return Comparer<int>.Default.Compare(y, x);
}
}
然后将其作为参数传递给方法:
...
var elementIndex = list.BinarySearch(5, new ReverseComparer());