【问题标题】:How to find/compare a class property in a List<class>如何在 List<class> 中查找/比较类属性
【发布时间】:2011-12-24 07:28:12
【问题描述】:

我有一个这样的类,它存储一些数据以供以后制作 ListView:

public class ListData
{
   public string Name{get; set;}
   public int ColumnsNumber{get; set;}
   //And some other stuff!!
}

现在,我有List&lt;ListData&gt; datas,其中包含上述类的许多实例。为了使 ListView 处于详细模式,我需要知道所需列的最大数量。我该如何检查?

目前我有:

int max = 0;
foreach(ListData data in datas)
{
  if (data.ColumnsNumber > max) max = data.columnsNumber;
}

这似乎可行,但有没有更好的方法,或者 C# 中的内置方法或其他东西可以做到这一点?

【问题讨论】:

    标签: c# class list compare


    【解决方案1】:

    对于喜欢非 lambda 版本的人:

    int max = (from d in datas
               select d.ColumnsNumber).Max();
    

    【讨论】:

      【解决方案2】:

      使用 Linq:

      var max = datas.Any() ? datas.Max(data => data.ColumnsNumber) : 0;
      

      【讨论】:

      • 如何将其更改为from d in datas...的形式
      • 对一个无法多次处理的枚举执行Any 然后Max 会导致问题,否则这会起作用。
      【解决方案3】:

      您可以为此使用 LINQ:

      var max = datas.Select(d => d.ConlumnsNumber).Max();
      

      通过这一行,您告诉 LINQ,将 ListData 元素集合映射到 ColumnsNumber 集合,然后调用 Max() 聚合方法。 为了编译它,你应该添加using System.Linq

      【讨论】:

      • 如果我有一个列表列表,例如List&lt;List&lt;class&gt;&gt;,您能告诉我如何实现吗?
      • 然后您可以使用 SelectMany 为您展平列表
      【解决方案4】:

      您可以使用 Linq 查询:

      int max = datas.Max(data => data.ColumnNumbers);
      

      【讨论】:

        【解决方案5】:

        试试LINQEnumerable.Max方法,例如:

        int max = datas.Max(d => d.ColumnsNumber);
        

        但是,如果集合为空,此方法会引发异常。

        【讨论】:

        • 如何将其更改为from d in datas...的形式
        猜你喜欢
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 2022-06-29
        • 2010-12-30
        • 2018-07-14
        • 1970-01-01
        相关资源
        最近更新 更多