【问题标题】:Convert list of elements with list to single list using lambda使用 lambda 将带有列表的元素列表转换为单个列表
【发布时间】:2016-03-16 10:31:14
【问题描述】:

我有家庭清单,每个家庭都包含一份居民清单。我想要一个函数来返回所有家庭的所有居民的列表。

到目前为止我所拥有的:

public List<Resident> Residents() {
    var list = new List<Resident>();
    Households.ForEach(x => list.AddRange(x.Residents));
    return list;
}

是否可以用 lambda 缩短它?像这样的:

public List<Resident> Residents => { ??? }

我知道家庭是否是我可以使用SelectMany 的列表列表,但它不是。

EDIT1:

明确地说,Household 是一个类,而不是一个容器。

EDIT2:

我尝试了以下

public List<Resident> Residents => Households.SelectMany(h => h.Residents);

但是这给了我错误:

错误 CS1061:“List”不包含“SelectMany”的定义,并且找不到接受“List”类型的第一个参数的扩展方法“SelectMany”(您是否缺少 using 指令还是程序集参考?)

EDIT3:

对不起,我以为我很清楚。 Household 是一个包含居民列表的类,如下所示:

class Household {
    public List<Resident> Residents { get; }
}

【问题讨论】:

  • 我不明白您对 SelectMany 的评论。为什么你不能Households.SelectMany(x =&gt; x.Residents)?
  • 如果不是列表,Hoseholds 是什么类型?你不能在上面做.ToList()吗?或者您是否忘记添加using 语句,这就是您看不到SelectMany 的原因?
  • 正如@KooKiz 所说,从您的代码看来,您可以简单地执行 SelectMany。
  • 嗯,呃……不,它不会包含“SeletMany”的定义,但它应该有 1 来表示“SelectMany”。
  • 您可能只是忘记添加using System.Linq;

标签: c# list lambda


【解决方案1】:

您可以在 C# 6.0 中执行此操作:

public List<Resident> Residents => Households.SelectMany(x => x.Residents).ToList(); 

您需要确保您的代码顶部有一个 using System.Linq; 以获取 IEnumerable&lt;T&gt; 扩展方法 - 其中包括 SelectMany。

【讨论】:

  • 这是他们回答中提到using System.Linq的唯一答案,所以我会接受这个。
【解决方案2】:

您的代码可以缩短为

var residents = Households.SelectMany(x => x.Residents).ToList(); 

residents 将成为IEnumerable&lt;Resident&gt;(或Residents 的任何类型,我假设它是一种称为Resident 的类型)。

如果您确实需要List&lt;Resident&gt;,可以在末尾标记.ToList()。

【讨论】:

    【解决方案3】:

    确保您使用的是 System.Linq

    using System.Linq;

    Households.SelectMany(x =&gt; x.Residents) 无论 Residents 是数组还是列表,都应该可以工作

    【讨论】:

      【解决方案4】:

      以下是我认为最短的:

      public List<Resident> Residents() 
      {
         return Households.SelectMany(x => x.Residents).ToList();
      }
      

      【讨论】:

      • 你不需要AddRange,实际上它不会编译为list在你的代码中不存在。
      • 是的,我刚刚意识到我没有把它拿出来
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多