首页 > C# > 如何按对象中的属性对列表进行排序

如何按对象中的属性对列表进行排序

上一篇 下一篇

我有一个名为的类,它具有诸如 、、 和 等属性。我有一个此类的列表:OrderOrderIdOrderDateQuantityTotalOrder

List<Order> objListOrder = new List<Order>();
GetOrderList(objListOrder); // fill list of orders

我想根据对象的一个属性对列表进行排序;例如,按订单日期或订单 ID。Order

如何在 C# 中执行此操作?

分割线

网友回答:

要在不使用 LINQ 的情况下执行此操作。网络2.0:

List<Order> objListOrder = GetOrderList();
objListOrder.Sort(
    delegate(Order p1, Order p2)
    {
        return p1.OrderDate.CompareTo(p2.OrderDate);
    }
);

如果您在 .Net3.0,那么LukeH的答案就是你所追求的。

若要对多个属性进行排序,仍可以在委托中执行此操作。例如:

orderList.Sort(
    delegate(Order p1, Order p2)
    {
        int compareDate = p1.Date.CompareTo(p2.Date);
        if (compareDate == 0)
        {
            return p2.OrderID.CompareTo(p1.OrderID);
        }
        return compareDate;
    }
);

这将为您提供带有降序 ID 的升序日期。但是,我不建议使用委托,因为这意味着许多地方没有代码重用。您应该实现一个并将其传递给您的方法。看这里。IComparerSort

public class MyOrderingClass : IComparer<Order>
{
    public int Compare(Order x, Order y)
    {
        int compareDate = x.Date.CompareTo(y.Date);
        if (compareDate == 0)
        {
            return x.OrderID.CompareTo(y.OrderID);
        }
        return compareDate;
    }
}

然后,要使用此 IComparer 类,只需实例化它并将其传递给您的 Sort 方法:

IComparer<Order> comparer = new MyOrderingClass();
orderList.Sort(comparer);

分割线

网友回答:

我能想到的最简单的方法是使用 Linq:

List<Order> SortedList = objListOrder.OrderBy(o=>o.OrderDate).ToList();

分割线

网友回答:

如果需要就地对列表进行排序,则可以使用该方法,传递委托:SortComparison<T>

objListOrder.Sort((x, y) => x.OrderDate.CompareTo(y.OrderDate));

如果您希望创建新的排序序列而不是就地排序,则可以使用 LINQ 的方法,如其他答案中所述。OrderBy

模板简介:该模板名称为【如何按对象中的属性对列表进行排序】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 251次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-13
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
企业网站 响应式 微信素材 微信模板 微信文章 html5 自适应 微信图片 微信公众平台 单页式简历模板
您可能会喜欢的其他模板