2 回答
TA贡献1851条经验 获得超3个赞
试试 LINQ:
using System.Linq; var ordered = agencyList.OrderBy(x => x.PublishDate);
或者如果你需要它降序:
var orderedDesc = agencyList.OrderByDescending(x => x.PublishDate);
如果您再次需要原始变量中的列表,您可以调用.ToList()
:
agencyList = agencyList.OrderBy(x => x.PublishDate).ToList();
如果 LINQ 不适合您(或者您希望获得最佳性能从而拒绝 LINQ 带来的开销),您可以使用.Sort
您尝试的方法:
agencyList.Sort((item1, item2) => item1.PublishDate.CompareTo(item2.PublishDate));
TA贡献1790条经验 获得超9个赞
您可以尝试使用 SortedList 代替 List,这样当您添加项目时它会自动排序。
定义您的类/接口:
interface INews1BE
{
DateTime PublishedDate { get; set; }
}
class News1BE : INews1BE
{
public DateTime PublishedDate { get; set; }
}
为 DateTime 定义比较器:
class DateTimeAscendingComparer : IComparer<DateTime>
{
public int Compare(DateTime a, DateTime b)
{
return a.CompareTo(b);
}
}
现在创建比较器和排序列表,将比较器传递给 SortedList 构造函数:
var comparer = new DateTimeAscendingComparer();
var sortedList = new SortedList<DateTime, INews1BE>(comparer);
添加一些项目并检查结果:
var item1 = new News1BE()
{
PublishedDate = DateTime.Now
};
var item2 = new News1BE()
{
PublishedDate = item1.PublishedDate.AddSeconds(-30)
};
sortedList.Add(item1.PublishedDate, item1);
//item2 goes before item1
sortedList.Add(item2.PublishedDate, item2);
foreach(var x in sortedList)
{
Console.WriteLine(x.Key);
}
您还可以通过 Value 访问您的对象:
foreach (var x in sortedList)
{
Console.WriteLine(x.Value.PublishedDate);
}
或者您可以迭代 Values 以立即访问您的 INews1BE 对象:
foreach(var x in sortedList.Values)
{
Console.WriteLine(x.PublishedDate);
}
实际上,如果您只关心升序,则不必为 DateTime 定义比较器 - 这是默认行为,因此您可以创建 SortedList 而无需将比较器传递给构造函数:
var sortedList = new SortedList<DateTime, INews1BE>();
但是,如果您需要降序,只需在比较时将DateTimea与 DateTime切换b:
class DateTimeDescendingComparer : IComparer<DateTime>
{
public int Compare(DateTime a, DateTime b)
{
return b.CompareTo(a);
}
}
- 2 回答
- 0 关注
- 128 浏览
添加回答
举报