C# 在ForEach语句中使用linq
我正在尝试将Linq与我的C# 在ForEach语句中使用linq,c#,linq,C#,Linq,我正在尝试将Linq与我的ForEach语句一起使用,以分组显示输出 我的代码如下所示: Rooms.ToList() .ForEach(room => room.RoomContents.ToList() .ForEach(roomContents => roomContents.SupportedCommands.ToList() .ForEach(command => Console.Write("\nThe comm
ForEach
语句一起使用,以分组显示输出
我的代码如下所示:
Rooms.ToList()
.ForEach(room => room.RoomContents.ToList()
.ForEach(roomContents => roomContents.SupportedCommands.ToList()
.ForEach(command => Console.Write("\nThe commands for {0} are: {1} ", roomContents.Name, command))));
Console.ReadLine();
电流输出:
使用Tap命令
键的命令是Drop
键的命令是Get
键的命令正在使用中
铲斗的命令为下降
Bucket的命令是Get
正在使用铲斗的命令
我的目标是以更友好的方式显示输出,即根据房间内容对命令进行分组。我希望输出显示如下内容
期望输出:
Tap的命令
使用
键的命令
滴
收到
使用
Bucket的命令
滴
收到
使用
尽管如此,这并不是LINQ的一个很好的用途。我自己也会使用循环
foreach(var room in Rooms)
{
foreach(var roomContents in room.RoomContents)
{
Console.WriteLine("The commands for {0}",roomContents.Name);
foreach(var command in roomContents.SupportedCommands)
{
Console.Writeline(command);
}
}
}
第三种可能是使用聚合来构建结果,但同样,它不是LINQ的一个很好的用途
尽管如此,这并不是LINQ的一个很好的用途。我自己也会使用循环
foreach(var room in Rooms)
{
foreach(var roomContents in room.RoomContents)
{
Console.WriteLine("The commands for {0}",roomContents.Name);
foreach(var command in roomContents.SupportedCommands)
{
Console.Writeline(command);
}
}
}
第三种可能是使用聚合来构建结果,但同样,它不是很好地使用LINQ。对于传统的
foreach
循环,这将更加干净:
foreach(var room in Rooms)
{
foreach(var roomContents in room.RoomContents)
{
Console.WriteLine("The commands for {0} are:",roomContents.Name);
foreach(command in roomContents.SupportedCommands)
Console.WriteLine(command);
}
}
或稍微简化:
foreach(var roomContents in Rooms.SelectMany(room => room.RoomContents))
{
Console.WriteLine("The commands for {0} are:",roomContents.Name);
foreach(command in roomContents.SupportedCommands)
Console.WriteLine(command);
}
您还可以将所有房间中的整个内容集合展平并分组
其他好处:
- 您可以比嵌入式lambda更轻松地调试
循环foreach
- 您不需要对每个集合调用
,就可以访问ToList
方法(它不是Linq扩展方法)ForEach
foreach
循环,这将更加干净:
foreach(var room in Rooms)
{
foreach(var roomContents in room.RoomContents)
{
Console.WriteLine("The commands for {0} are:",roomContents.Name);
foreach(command in roomContents.SupportedCommands)
Console.WriteLine(command);
}
}
或稍微简化:
foreach(var roomContents in Rooms.SelectMany(room => room.RoomContents))
{
Console.WriteLine("The commands for {0} are:",roomContents.Name);
foreach(command in roomContents.SupportedCommands)
Console.WriteLine(command);
}
您还可以将所有房间中的整个内容集合展平并分组
其他好处:
- 您可以比嵌入式lambda更轻松地调试
循环foreach
- 您不需要对每个集合调用
,就可以访问ToList
方法(它不是Linq扩展方法)ForEach
.ToList()
才能使用.ForEach()
,则不应使用.ForEach()
。有一个非常好的foreach
关键字。一般来说,.ForEach()
有点不受欢迎。这是一个以前的时代(林克之前)。经典链接:如果必须使用.ToList()
才能使用.ForEach()
,那么就不应该使用.ForEach()
。有一个非常好的foreach
关键字。一般来说,.ForEach()
有点不受欢迎。这是一个以前的时代(林克之前)。经典链接:这不是LINQ的一个很好的用途吗?这不是LINQ的任何用途。您在技术上是正确的,LINQ的默认实现不包括ForEach
,尽管有许多扩展实现了它(rx、MoreLinq、PLINQ——尽管它被称为ForAll)。他使用的只是列表对象上的一个方法。这不是LINQ的一个很好的用途吗?这不是LINQ的任何用途。您在技术上是正确的,LINQ的默认实现不包括ForEach
,尽管有许多扩展实现了它(rx、MoreLinq、PLINQ——尽管它被称为ForAll)。他正在使用的只是列表对象上的一个方法。