【问题标题】:How to sort a <list> of class in c#?如何在 C# 中对类的 <list> 进行排序?
【发布时间】:2012-08-11 07:18:10
【问题描述】:

我有一个这样的类的列表:

 public class CityCodeInfo
 {
    public string CityName;
    public string Province;
    public string Code; 
  }

  List<CityCodeInfo> lstCityt = new List<CityCodeInfo>();

我如何按任何变量(城市名、省和代码)对该列表进行排序

我试过这个代码:

  lstCityt.Sort((x, y) => string.Compare(x.CityName, y.CityName));

但它不起作用......

有什么想法吗?!

【问题讨论】:

  • “它不起作用”非常模糊。当你尝试时会发生什么?请给出一个简短但完整的程序来演示该问题。 (这也与 ASP.NET 无关。)
  • 看起来上面的代码确实可以工作。 Sort 只会对列表中已有的项目进行排序,不会改变未来项目的添加方式。因此,您只能在填充列表后进行排序。否则,请使用排序集合而不是 List&lt;&gt;
  • 我在填充列表后进行排序,但它没有排序。没有一个巨大的代码,只是一个类列表,我通过转发器在网页中显示它。但我想订购它。
  • 也许“消费者”(网页)没有注意到List&lt;&gt; 发生了变化?它可能需要重新阅读,或者等到您排序之后再阅读?

标签: c# asp.net list


【解决方案1】:

您可以使用 LINQ。

升序

var result = lstCityt.OrderBy(C=> C.CityName).ThenBy(C=> C.Province).ThenBy(C=> C.Code);

降序

var result = lstCityt.OrderByDescending(C=> C.CityName).ThenByDescending(C=> C.Province).ThenByDescending(C=> C.Code);

两者

var result = lstCityt.OrderBy(C=> C.CityName).ThenByDescending(C=> C.Province).ThenByDescending(C=> C.Code);

【讨论】:

  • List&lt;&gt;.Sort 更快时为什么要使用 LINQ,这正是原始海报所要求的?您的解决方案不会改变原来的List&lt;&gt;,只会提供一个新的IEnumerable&lt;&gt;,并按排序顺序。
  • 我测试了你的代码,但什么也没发生。没有错误,没有排序列表。如何使用 IEnumerable?!
  • @maryammohammadi 结果变量包含您的排序数据,您可以通过 ToList() 方法将此结果 IEnumerable 转换为 List。
  • @JeppeStigNielsen,就使用 Sort 方法而言,该类必须实现 IComparable 或 IComparable 接口,并且还要编写委托对列表的元素进行排序,所以我认为这将是最简单的解决方案。对于您的关注,请查找this 文章以使用列表中的排序方法
  • 原始海报使用Sort 的重载,它将Comparison&lt;CityCodeInfo&gt; 委托作为参数。因此,该委托将用于排序,在这种情况下,CityCodeInfo 不需要实现 IComparable
【解决方案2】:

你已经拥有的已经是完整且正确的:

lstCityt.Sort((x, y) => string.Compare(x.CityName, y.CityName));

这确实对一个类的列表进行了排序。听起来您正在看到一些与中继器有关的次要 问题,但您没有为此提供上下文。我要看的主要是时间安排,即您是绑定 before 还是 after 对列表进行排序。

【讨论】:

    猜你喜欢
    • 2019-12-13
    • 2011-06-11
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多