我按降序排列了SortedList。
public class MyComparer : IComparer<int>
{
public int Compare(int x, int y)
{
if (x.CompareTo(y) > 0)
return -1;
return 1;
}
}
class Program
{
static void Main(string[] args)
{
SortedList<int, bool> myList = new SortedList<int, bool>(new MyComparer());
myList.Add(10, true);
bool check = myList[10];//In this place an exception "Can't find key" occurs
}
}
当没有我自己的IComparer创建SortedList时,代码工作正常,不会发生异常。
答案 0 :(得分:7)
比较器实现无效;它违反了以下要求:
x.CompareTo(x) == 0
当它尝试查找给定键的精确匹配时,这会使排序列表混淆。
这是一个简单的解决方法:
public int Compare(int x, int y)
{
return y.CompareTo(x); // Reverses the in-built comparison.
}
但是,如果您想更频繁地解决此问题,请考虑创建ReverseComparer<T>
,例如提供here的<{1}}。