很抱歉如果这是重复的,麻烦指出正确的问题。
我有一个叫做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 **
非常感谢Alexei、Ehsan和Dave的帮助。我尝试了Dave的答案,它有效了。我试图以更好的方式完成它,以便不需要添加任何新属性。我没有尝试Ehsan使用StringDateComparer的方法,但它帮助我理解了如何在Order linq语句中使用Comparer。最后,就像Alexei指出的那样,我做了如下操作
** 更新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
}
);
DateTime
,将其转换为SqlDateTime
并仅暴露一个string
?你真正的问题是与另一个团队相关的。 - juharr