如果重複,我很抱歉。請指出正確的問題。C#:自定義屬性的排序列表
我有一個名爲指明MyDate類像下面
public class MyDate
{
private SqlDateTime m_dateTime;
public MyDate(DateTime dateTime)
{
if (DateTime.Compare(dateTime, (DateTime)SqlDateTime.MinValue) <= 0)
m_dateTime = SqlDateTime.MinValue;
else
m_dateTime = dateTime;
}
public string MMDDYYYYHHMMSS
{
get
{
if(m_dateTime > SqlDateTime.MinValue)
return m_dateTime.Value.ToString("MM/dd/yyyy hh:mm:ss tt");
else
return String.Empty;
}
}
}
我有類調用MyEvent像下面
public class MyEvent
{
public int EventId{get;set;}
public MyDate StartDate{get;set;}
}
我MyEvent的集合像
List<MyEvent> myEvents.
現在我需要按StartDate的降序對myEvents進行排序。我的問題是我無法添加IComparable或更改MyDate,因爲它是由其他團隊編寫的,我只是提到DLL。我無法控制MyDate代碼。任何人都可以幫助我如何做到。我創建了一個新的比較器類,它實現了IComparer,但無法理解如何使用它並對myEvents進行排序。
**更新1 **
非常感謝您對阿列克謝,作者Ehsan和Dave幫了我。我試過戴夫的答案,它的工作。我試圖以更好的方式做到這一點,這樣就不需要添加任何新的屬性。我沒有試過Ehsan使用StringDateComparer的方式,但它幫助我理解了如何在order linq語句中使用Comparer。最後由阿列克謝如指出我不喜歡下面
**更新2 **
有時我得到空字符串e2.StartDate.MMDDYYYYHHMMSS和/或e2.StartDate.MMDDYYYYHHMMSS所以我改變了我的代碼一樣下面
myEvents.Sort(
delegate(MyEvent e1, MyEvent e2)
{
DateTime dt1;
DateTime dt2;
DateTime.TryParse(e1.StartDateTime.MMDDYYYYHHMMSS, out dt1);
DateTime.TryParse(e2.StartDateTime.MMDDYYYYHHMMSS, out dt2);
return dt2.CompareTo(dt1); // descending
//return dt1.CompareTo(dt2); // ascending
}
);
它不完全相同的副本,OP的情況是不同的 –
,需要一個'DateTime'類轉換成'SqlDateTime',只公開了一個字符串' '?你真正的問題是這個團隊。 – juharr
你很明顯看到了我相信的東西(http://stackoverflow.com/questions/3309188/how-to-sort-a-listt-by-a-property-in-the-object)因爲它首先鏈接到您的帖子的標題搜索(https://www.bing.com/search?q=C%23+%3A+Sort+list+on+custom+property)。請說明爲什麼解決方案建議不起作用(包括自定義比較器),所以很明顯這個帖子不重複。 –