[C#]使用 linq 在 ForEach 语句中

标签: Linq C#
发布时间: 2017/2/27 3:59:50
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我正在使用 Linq 与我 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();

输出电流︰

The command for Tap are Use
The command for Key are Drop
The command for Key are Get
The command for Key are Use
The command for Bucket are Drop
The command for Bucket are Get
The command for Bucket are Use

我的目标是要显示输出在更友好的方式,即分组命令基于房间内容。我想要输出到显示器这样的事情。

所需的输出︰

The commands for Tap 
Use
The commands for Key 
Drop
Get
Use
The commands for Bucket
Drop
Get
Use

解决方法 1:

这会更加清洁与传统 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);
}

你也可以拼合和分组的内容在所有的房间的整个集合。

其他的好处︰

  • 您可以调试 foreach 循环比嵌入式 lambda 容易得多。
  • 您不需要调用 ToList 对每个集合来访问 ForEach 方法 (它故意不是 Linq 扩展方法)
官方微信
官方QQ群
31647020