Как отсортировать список объектов по определенному полю в C #?

У меня этот class:

public class StatInfo { public string contact; public DateTime date; public string action; } 

то у меня есть список StatInfo, но я не уверен, как сортировать его в соответствии с полем даты. Должен ли я использовать метод сортировки? Должен ли я создать свою собственную?

 var _allStatInfo = new List(); // adding lots of stuff in it _allStatInfo.SortByDate??? 

Каков наилучший способ сделать это без необходимости писать тонны кода (если это возможно)?

благодаря

Использование LINQ:

 var sortedList = _allStatInfo.OrderBy(si => si.date).ToList(); 

Сортировка исходного списка:

 _allStatInfo.Sort(new Comparison((x, y) => DateTime.Compare(x.date, y.date))); 

Я вижу, что у вас есть ответ в любом случае, но …

  1. Вы можете избежать некоторого уродства, просто разделив заявление на две половины:

     Comparison comparison = (x, y) => DateTime.Compare(x.date, y.date); _allStatInfo.Sort(comparison); 

    Возможно, вы захотите рассмотреть возможность прямого вызова CompareTo :

     Comparison comparison = (x, y) => x.date.CompareTo(y.date); _allStatInfo.Sort(comparison); 
  2. Вы можете создать реализацию IComparer используя мой class ProjectionComparer – это часть MiscUtil , и я включил версию без комментирования в нижней части этого ответа. Вы тогда напишите:

     _allStatInfo.Sort(ProjectionComparer.Create(x => x.date)); 
  3. Даже если вы используете .NET 2.0, вы все равно можете использовать LINQ с помощью LINQBridge .

Вот вам class ProjectionComparer необходимый для второго ответа. Первые несколько classов на самом деле просто помощники, позволяющие работать с типичным типом.

 public static class ProjectionComparer { public static ProjectionComparer Create (Func projection) { return new ProjectionComparer(projection); } public static ProjectionComparer Create (TSource ignored, Func projection) { return new ProjectionComparer(projection); } } public static class ProjectionComparer { public static ProjectionComparer Create (Func projection) { return new ProjectionComparer(projection); } } public class ProjectionComparer : IComparer { readonly Func projection; readonly IComparer comparer; public ProjectionComparer(Func projection) : this (projection, null) { } public ProjectionComparer(Func projection, IComparer comparer) { projection.ThrowIfNull("projection"); this.comparer = comparer ?? Comparer.Default; this.projection = projection; } public int Compare(TSource x, TSource y) { // Don't want to project from nullity if (x==null && y==null) { return 0; } if (x==null) { return -1; } if (y==null) { return 1; } return comparer.Compare(projection(x), projection(y)); } } 

Чтобы проиллюстрировать ответ Роберта К. Картайно:

 public class StatInfo : IComparable { public string contact; public DateTime date; public string action; public int CompareTo(StatInfo value) { return this.date.CompareTo(value.date); } } var _allStatInfo = new List(); // this now sorts by date _allStatInfo.Sort(); 

Не самое общее решение, но хорошо, если вы собираетесь сортировать по дате. И, как сказал Роберт, вы все равно можете переопределять сортировку по умолчанию, передавая параметр IComparer методу сортировки.

Используйте выражение lambda для сопоставления пары с сопоставлением:

 _allStatInfo.Sort((x, y) => x.date - y.date); 

Для DateTime не должно быть необходимости сравнивать.

 _allStatInfo.OrderyBy(d => d.date); 

или

 _allStatInfo.OrderByDescending(d => d.Date); 

он работал для меня Сортировка массива настраиваемого типа с использованием делегата

 // sort array by name Array.Sort(users, delegate(User user1, User user2) { return user1.Name.CompareTo(user2.Name); }); // write array (output: Betty23 Lisa25 Susan20) foreach (User user in users) Console.Write(user.Name + user.Age + " "); 
  • Сортировка IList в C #
  • Сортировка текстового файла по длине строки, включая пробелы
  • Как заказать список файлов по имени файла с номером?
  • Как использовать Thrust для сортировки строк матрицы?
  • Mysql: выберите строки из таблицы, которые не находятся в другом
  • Почему минималистский, например, Haskell quicksort не «истинный» quicksort?
  • Сортировка вектора в порядке убывания
  • Функция библиотеки C для сортировки
  • int array (сортировка от самого низкого до самого высокого)
  • Как команда сортировки UNIX может сортировать очень большой файл?
  • Как сортировать элементы TreeView с помощью SortDescriptions в Xaml?
  • Давайте будем гением компьютера.