我正在使用此处的NumericComparer代码。将其添加到项目中非常容易:NumericComparer

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

我得到的错误是这样的:

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

有什么想法吗?

最佳答案

看起来Sort方法期望使用类型参数实现IComparer<T>的通用实现,而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
    }
}


现在,您可以拨打myList.Sort(new GenericNumericComparer<decimal>());

(请注意,您实际上也可以调用泛型类NumericComparer -它通过类型参数进行区分。为清楚起见,在此处添加了“泛型”。)

10-06 13:30