Вы можете использовать SortedList вместо List, чтобы он автоматически сортировался при добавлении элементов.
Определите ваши классы / интерфейсы:
interface INews1BE
{
DateTime PublishedDate { get; set; }
}
class News1BE : INews1BE
{
public DateTime PublishedDate { get; set; }
}
Определите компаратор для DateTime:
class DateTimeAscendingComparer : IComparer<DateTime>
{
public int Compare(DateTime a, DateTime b)
{
return a.CompareTo(b);
}
}
Теперь создайте компаратор и отсортированный список, передавая компаратор конструктору SortedList:
var comparer = new DateTimeAscendingComparer();
var sortedList = new SortedList<DateTime, INews1BE>(comparer);
Добавьте некоторые элементы и проверьте результаты:
var item1 = new News1BE()
{
PublishedDate = DateTime.Now
};
var item2 = new News1BE()
{
PublishedDate = item1.PublishedDate.AddSeconds(-30)
};
sortedList.Add(item1.PublishedDate, item1);
//item2 goes before item1
sortedList.Add(item2.PublishedDate, item2);
foreach(var x in sortedList)
{
Console.WriteLine(x.Key);
}
Вы также можете получить доступваш объект через Value:
foreach (var x in sortedList)
{
Console.WriteLine(x.Value.PublishedDate);
}
Или вы можете перебрать значения, чтобы получить немедленный доступ к вашему объекту INews1BE:
foreach(var x in sortedList.Values)
{
Console.WriteLine(x.PublishedDate);
}
На самом деле вам не нужно определять компаратор для DateTime, есливы просто заботитесь о порядке возрастания - это поведение по умолчанию, поэтому вы можете просто создать SortedList, не передавая компаратор конструктору:
var sortedList = new SortedList<DateTime, INews1BE>();
Но если вам нужен порядок убывания, просто переключите DateTime a
с DateTime b
при сравнении:
class DateTimeDescendingComparer : IComparer<DateTime>
{
public int Compare(DateTime a, DateTime b)
{
return b.CompareTo(a);
}
}