如果重复,我很抱歉。请指出正确的问题。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)。请说明为什么解决方案建议不起作用(包括自定义比较器),所以很明显这个帖子不重复。 –