在C#中使用NumericComparer代码,为什么我的List.Sort()会出现转换错误?

Eth*_*len 1 .net c# silverlight visual-studio windows-phone-7

我正在使用位于此处的NumericComparer代码.将它添加到项目中非常容易:NumericComparer

我有一个包含数字的字符串列表,我的代码就是这样: myList.Sort(new NumericComparer());

我得到的错误是这样的:

无法从'ns.NumericComparer'转换为'System.Collections.Generic.IComparer'

有什么想法吗?

Jay*_*Jay 5

看起来该Sort方法期望实现IComparer<T>- generic,带有类型参数,而NumericComparer实现非泛型IComparer接口.

所以,如果你的清单是,比方说List<decimal>,你需要提供一个IComparer<decimal>.

您应该能够快速组建一个利用NumericComparer以下内容的类:

public class GenericNumericComparer<T> : IComparer<T>
{
    private static readonly NumericComparer _innerComparer = new NumericComparer();

    public int Compare(T x, T y)
    {
        return _innerComparer.Compare(x, y); // I'm guessing this is how NumericComparer works
    }
}
Run Code Online (Sandbox Code Playgroud)

所以现在你可以打电话了 myList.Sort(new GenericNumericComparer<decimal>());

(注意,你实际上也可以调用你的泛型类NumericComparer- 它通过类型参数来区分.为了清楚起见,我在这里添加了"Generic".)