[英]LINQ expression instead of nested foreach loops
我有以下兩種情況:
public class Client{
public List<Address> addressList{get;set;}
}
public class Address{
public string name { get; set; }
}
我有一個名為testList
Client
類型的列表。 它包含n個客戶端,每個客戶端包含n個地址
List<Client> testList;
我如何使用LINQ執行以下操作:
foreach (var element in testList)
{
foreach (var add in element.addressList)
{
console.writeLine(add.name);
}
}
好吧,我不會將Console.WriteLine
放在lambda表達式中,但是您可以使用SelectMany
來避免嵌套:
foreach (var add in testList.SelectMany(x => x.addressList))
{
Console.WriteLine(add.name);
}
我幾乎沒有理由將結果轉換為列表,然后使用List<T>.ForEach
,這是該語言的完美foreach
循環的一部分。 就像您自然地沒有一個委托來應用每個名稱一樣,例如作為方法參數-您始終只是在寫控制台。 有關更多想法,請參閱Eric Lippert的博客文章 。
(我也強烈建議您開始遵循.NET命名約定,但這是另一回事。)
foreach(var a in testList.SelectMany(c => c.addressList))
{
Console.WriteLine(a.name);
}
它不會實現任何新集合。
這可能會有所幫助:
testList.ForEach(i => i.addressList.ForEach(j => Console.WriteLine(j.name)));
foreach(var add in testList.SelectMany(element => element.addressList)){
Console.WriteLine(add.name);
}
testList.SelectMany(c => c.addressList)
.Select(a => a.name)
.ToList()
.ForEach(Console.WriteLine)
使用ForEach方法:
testList.ForEach(tl=>tl.addressList.ForEach(al=>console.writeLine(al.name)));
LINQ不包含ForEach
函數, 並且它們也不打算這樣做 ,因為它與LINQ是函數方法的想法背道而馳。 因此,您無法在單個語句中執行此操作。 List<T>
有一個ForEach
方法,但是出於與LINQ中不相同的原因,我建議不要使用此方法。
但是,您可以使用LINQ來簡化代碼,例如
foreach (var add in testList.SelectMany(x => x.addressList))
{
Console.WriteLine(add.name);
}
// or
foreach (var name in testList.SelectMany(x => x.addressList).Select(x => x.name))
{
Console.WriteLine(name);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.