2011-11-19 63 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

對不起,我沒有閱讀你的描述我犯了你的第一個和第二個樣本之間的錯誤。 –