Используя код NumericComparer в C #, почему я получаю ошибку преобразования для моего List.Sort ()? - PullRequest
1 голос
/ 07 марта 2012

Я использую код NumericComparer, расположенный здесь. Добавить его в проект очень просто: NumericComparer

У меня есть список строк с числами в них, и мой код просто так: myList.Sort(new NumericComparer());

Я получаю следующую ошибку:

не может преобразовать из 'ns.NumericComparer' в 'System.Collections.Generic.IComparer'

Есть идеи, почему?

1 Ответ

5 голосов
/ 07 марта 2012

Похоже, что метод 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
    }
}
* 1014.* Так что теперь вы можете вызывать myList.Sort(new GenericNumericComparer<decimal>());

(Обратите внимание, что вы на самом деле можете также назвать свой универсальный класс NumericComparer - он отличается параметром типа. Я добавил здесь "Generic" для ясности.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...