我有家庭清单,每个家庭都有一份居民名单。我希望有一个函数返回所有家庭的所有居民的列表。
到目前为止我所拥有的:
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:
为了说清楚,家庭是一个阶级,而不是一个容器。
EDIT2:
我尝试了以下
public List<Resident> Residents => Households.SelectMany(h => h.Residents);
然而,这给了我错误:
错误CS1061:'列表&lt;家用&GT;”不包含'SelectMany'的定义,也没有扩展方法'SelectMany'接受类型'List&lt;的第一个参数家用&GT;”可以找到(你错过了使用指令或程序集引用吗?)
EDIT3:
抱歉,我以为我很清楚。家庭是一个有居民名单的班级,如下:class Household {
public List<Resident> Residents { get; }
}
答案 0 :(得分:4)
您可以在C#6.0中执行此操作:
public List<Resident> Residents => Households.SelectMany(x => x.Residents).ToList();
您需要确保代码顶部有using System.Linq;
以获取IEnumerable<T>
扩展方法 - 其中包括SelectMany
。
答案 1 :(得分:3)
您的代码可以缩短为
var residents = Households.SelectMany(x => x.Residents).ToList();
residents
将是IEnumerable<Resident>
(或任何类型Residents
,我假设其类型为Resident
)。
如果您确实需要.ToList()
,则可以在最后标记List<Resident>
。
答案 2 :(得分:2)
确保您使用的是System.Linq
using System.Linq;
Households.SelectMany(x => x.Residents)
都应该有效
答案 3 :(得分:1)
以下是我认为最短的:
public List<Resident> Residents()
{
return Households.SelectMany(x => x.Residents).ToList();
}