我想用date
属性对我的列表进行排序。
这是我的自定义类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Test.Web
{
public class cTag
{
public int id { get; set; }
public int regnumber { get; set; }
public string date { get; set; }
}
}
这是我要排序的List
:
List<cTag> Week = new List<cTag>();
我想按cTag
类的date
属性对List
进行排序。日期的格式为dd.MM.yyyy
。
我读过一些关于IComparable
接口的文章,但我不知道如何使用它。
发布于 2010-07-02 15:31:49
这样做的一种方法是使用delegate
List<cTag> week = new List<cTag>();
// add some stuff to the list
// now sort
week.Sort(delegate(cTag c1, cTag c2) { return c1.date.CompareTo(c2.date); });
发布于 2010-07-02 15:43:20
您的cTag类必须实现IComparable<T>
接口,这一点是正确的。然后,您可以直接调用列表中的Sort()
。
要实现IComparable<T>
接口,必须实现CompareTo(T other)
方法。最简单的方法是调用要比较的字段的CompareTo方法,在本例中为date。
public class cTag:IComparable<cTag> {
public int id { get; set; }
public int regnumber { get; set; }
public string date { get; set; }
public int CompareTo(cTag other) {
return date.CompareTo(other.date);
}
}
但是,这不能很好地排序,因为这将对字符串使用经典排序(因为您将date声明为string)。因此,我认为最好的做法是重新定义类,并将date声明为DateTime,而不是string。代码几乎保持不变:
public class cTag:IComparable<cTag> {
public int id { get; set; }
public int regnumber { get; set; }
public DateTime date { get; set; }
public int CompareTo(cTag other) {
return date.CompareTo(other.date);
}
}
在创建类的实例时,您只需要做一件事就是将包含日期的字符串转换为DateTime类型,但这可以很容易地完成,例如通过DateTime.Parse(String)
方法。
发布于 2010-07-02 15:34:34
对于这种情况,您还可以使用LINQ进行排序:
week = week.OrderBy(w => DateTime.Parse(w.date)).ToList();
https://stackoverflow.com/questions/3163922
复制相似问题