我有一個問題。對象由日期時間可變
我有對象的ArrayList
。每個對象都包含一個DateTime
數據字段。
我需要通過這個DateTime
數據字段進行排序這個ArrayList
。
這是我當前的代碼,它不工作:
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
1992年2月9日3點54
23/11/2011 12:15
我嘗試使用剛剛>和<運營商比較,得到了相同的結果。我用不同的命令字符串轉換爲DateTime對象,如Convert.ToDateTime
,DateTime.Parse
也試過。嘗試輸入沒有HH:毫米(相應地調整了代碼),仍然有相同的輸出。我試圖不使用IFormatProvider
(將其設置爲空),並再次無處可去。
一次偶然的機會,我發現這個線程:
How to sort ArrayList of DateTime objects in descending order?
我提取的所有從對象的日期,並把它們放到這個日期列表。使用List.Sort()
並且它產生了正確的輸出。但後來我被困在如何使用這個排序列表排序我的EventHolder ArrayList。我在這堵牆上撞了一段時間,並沒有產生任何結果。
我很新的節目,所以我幾乎不知道做我在做什麼什麼好辦法。它甚至不工作。 有人可以向我解釋我哪裏出錯了嗎?
您是否必須堅持舊的和醜陋的ArrayList?如果您使用泛型集合和LINQ,則可以用1行代碼完成整個任務。 – 2012-03-01 15:34:54
可以使用列表代替,不必是數組列表。 –
eltaro
2012-03-01 15:51:54
我建議不要使用LINQ來做這樣的事情。你可能得到的只是一個單一的代碼行,但它會比只使用'ArrayList.Sort()'或'名單的.sort()'顯著慢。 –
xxbbcc
2012-03-01 16:35:34