【发布时间】: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 => x.Residents)? -
如果不是列表,Hoseholds 是什么类型?你不能在上面做
.ToList()吗?或者您是否忘记添加using语句,这就是您看不到SelectMany的原因? -
正如@KooKiz 所说,从您的代码看来,您可以简单地执行 SelectMany。
-
嗯,呃……不,它不会包含“SeletMany”的定义,但它应该有 1 来表示“SelectMany”。
-
您可能只是忘记添加
using System.Linq;