2011-11-19 40 views
3

我有SortedList降序。C#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创建的代码工作正常,没有异常发生。

回答

7

比较器实现无效;它违反了规定:

x.CompareTo(x) == 0 

这混淆排序列表,当它试图找到一个确切的匹配对于给定的关键。

这里有一个简单的解决办法:

public int Compare(int x, int y) 
{ 
    return y.CompareTo(x); // Reverses the in-built comparison. 
} 

但是,如果你想解决这个问题更普遍,考虑创建一个ReverseComparer<T>,如一个提供here

+7

@Saeed:请不要错误地编辑这篇文章。 – Ani

+0

对不起,我没有阅读你的描述我犯了你的第一个和第二个样本之间的错误。 –