Как использовать лямбда-выражение для сортировки INTEGERS внутри объекта? - PullRequest
2 голосов
/ 04 мая 2010

У меня есть коллекция объектов, и я знаю, что могу отсортировать по ИМЯ (строковый тип), сказав

collEquipment.Sort((x, y) => string.Compare(x.ItemName, y.ItemName));

, что РАБОТАЕТ.

Но я хочу отсортировать по идентификатору(целочисленный тип), и нет такой вещи, как Int32.Compare

Так как мне это сделать?Это не работает

collEquipment.Sort((x, y) => (x.ID < y.ID));  //error

Я знаю, что ответ будет очень простым.Лямбда-выражения смущают меня.

Ответы [ 3 ]

14 голосов
/ 04 мая 2010
collEquipment.Sort((x, y) => y.ID.CompareTo(x.ID));
8 голосов
/ 04 мая 2010

Здесь вы можете отсортировать список по любому свойству, которое реализует IComparable[<T>] (что делает int):

public static class ListExtensions {
    public static void Sort<TSource, TValue>(
        this List<TSource> list,
        Func<TSource, TValue> selector) {
        list.Sort((x,y) => Comparer<TValue>.Default
            .Compare(selector(x),selector(y)));
    }
}

Сейчас:

collEquipment.Sort(x => x.ItemName);

или

collEquipment.Sort(x => x.ID);
7 голосов
/ 04 мая 2010

попробуйте

collEquipment.Sort((x, y) => y.ID - x.ID);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...