C#SortedList,按键获取值

时间:2011-11-19 09:44:06

标签: c# sortedlist icomparer

我按降序排列了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时,代码工作正常,不会发生异常。

1 个答案:

答案 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}}。