我有家庭清單,每個家庭都包含居民清單。我想要一個函數返回所有家庭所有居民的列表。使用lambda將清單中的元素列表轉換爲單個清單
我到目前爲止有:
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);
然而,這給我的錯誤:
error CS1061: 'List< Household>' does not contain a definition for 'SelectMany' and no extension method 'SelectMany' accepting a first argument of type 'List< Household>' could be found (are you missing a using directive or an assembly reference?)
EDIT3:
對不起,我以爲我很清楚。家庭是有居民的名單一類,像這樣:
class Household {
public List<Resident> Residents { get; }
}
我不明白你對SelectMany的評論。你爲什麼不能'Households.SelectMany(x => x.Residents)'? –
如果不是列表,Hoseholds是什麼類型?你不能在'之前做'.ToList()'嗎?或者你忘了添加'using'語句,這就是爲什麼你看不到'SelectMany'? – Niklas
正如@KooKiz指出的那樣,從你的代碼看起來你可以簡單地做SelectMany。 –