Как я могу сортировать List <T> на основе свойств T?
Мой код выглядит следующим образом:
Collection<NameValueCollection> optionInfoCollection = ....
List<NameValueCollection> optionInfoList = new List<NameValueCollection>();
optionInfoList = optionInfoCollection.ToList();
if(_isAlphabeticalSoting)
Sort optionInfoList
Я попробовал optionInfoList.Sort(), но он не работает.
Ответы
Ответ 1
Используя метод сортировки и лямбда-выражения, это очень просто.
myList.Sort((a, b) => String.Compare(a.Name, b.Name))
В приведенном выше примере показано, как сортировать по свойству Name вашего типа объекта, предполагая, что Name имеет строку типа.
Ответ 2
Если вы просто хотите, чтобы Sort()
работал, тогда вам нужно реализовать IComparable
или IComparable<T>
в классе.
Если вы не возражаете против создания нового списка, вы можете использовать методы расширения OrderBy
/ToList
LINQ. Если вы хотите отсортировать существующий список с более простым синтаксисом, вы можете добавить несколько методов расширения, включив:
list.Sort(item => item.Name);
Например:
public static void Sort<TSource, TValue>(
this List<TSource> source,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
source.Sort((x, y) => comparer.Compare(selector(x), selector(y)));
}
public static void SortDescending<TSource, TValue>(
this List<TSource> source,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
source.Sort((x, y) => comparer.Compare(selector(y), selector(x)));
}
Ответ 3
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
List<Person> people = new List<Person>();
people.Sort(
delegate(Person x, Person y) {
if (x == null) {
if (y == null) { return 0; }
return -1;
}
if (y == null) { return 0; }
return x.FirstName.CompareTo(y.FirstName);
}
);
Ответ 4
Вам нужно настроить компаратор, который сообщает Sort(), как упорядочить элементы.
Посмотрите List.Sort Method (IComparer) для примера того, как это сделать...