У меня проблема.Сортировка объектов в ArrayList по переменной DateTime внутри объектов
У меня есть ArrayList
объектов. Каждый объект содержит поле данных DateTime
.
Мне нужно разобрать ArrayList
этим DateTime
поле данных.
Это мой текущий код и он не работает:
for (int i = 0;i<EventHolder.Count;i++)
{
Event obj = (Event) EventHolder[i];
try
{
obj2=(Event)EventHolder[i+1];
}
catch
{
break;
}
DateTime date1 = DateTime.ParseExact(obj.Date_And_Time,"dd/MM/yyyy HH:mm",region);
DateTime date2 = DateTime.ParseExact(obj2.Date_And_Time, "dd/MM/yyyy HH:mm", region);
if (DateTime.Compare(date1,date2)>0)
{
Event tempobj=obj2;
EventHolder[i+1]=obj;
EventHolder[i]=tempobj;
}
}
foreach (Event i in EventHolder)
{
Console.WriteLine(i.Date_And_Time);
}
Console.ReadLine();
Я использую эти 3 даты, чтобы проверить, работает ли он:
23/11/2011 12:15
28/06/2010 04:05
02/09/1992 03:54
Выход всегда:
28/06/2010 04:05
02/09/1992 03:54
23/11/2011 12:15
Я попытался использовать только> и < операторов для сравнения и получил те же результаты. Я также попытался использовать разные команды для преобразования строк в объекты DateTime, например Convert.ToDateTime
, DateTime.Parse
. Пробовал вводить без ЧЧ: мм (скорректировал код соответственно) и все равно имел тот же результат. Я попробовал не использовать IFormatProvider
(установить его значение null) и больше не получил ничего.
Случайно, я нашел эту тему:
How to sort ArrayList of DateTime objects in descending order?
я извлеченный все даты из объектов и поместить их в этот список DateTime. Использовал List.Sort()
и произвел правильный выход. Но затем я застрял в том, как использовать этот отсортированный список для сортировки моего EventHolder ArrayList. Некоторое время я стучал в эту стену и ничего не добился.
Я очень новичок в программировании, поэтому я почти не знаю, как хорошо делать то, что я делаю. И это даже не работает. Может кто-нибудь объяснить мне, где я ошибаюсь?
Вам нужно придерживаться старого и уродливого ArrayList? Если вы использовали общие коллекции и LINQ, вся эта задача могла быть выполнена в 1 строке кода. –
Может использовать List вместо этого, не обязательно быть администратором. –
eltaro
Я бы рекомендовал не использовать LINQ для чего-то подобного. Вы можете получить только одну строку кода, но она будет значительно медленнее, чем просто использование 'ArrayList.Sort()' или 'List .Sort()'. –
xxbbcc