繁体   English   中英

用linq语句替换foreach

[英]Replacing a foreach with a linq statement

我正在尝试将此代码转换为linq:

foreach (var printer in printers)
{
    if (printer.Installed)
        installedPrinters.Add(printer);
}

我是Linq的新手,并希望获得有关在迭代集合时如何工作的指示。

printers.Where(printer => printer.Installed)
  .ToList()
  .ForEach(printer => installedPrinters.Add(printer));

请注意,需要在ForEach之前调用ToList()(请参阅使用Foreach子句的Lambda表达式 )。

还要注意,尽管这行得通,但是您的原始代码可能更易于阅读... LINQ很酷,但并不觉得必须将其用于所有事情:)

如果您只是尝试创建新列表,则可以始终执行以下操作:

var installedPrinters = printers.Where(p => p.Installed).ToList();

如果要添加到列表中可能已经包含项目,则可以尝试:

installedPrinters.AddRange(printers.Where(p => p.Installed));

假设您的installedPrinters实际上是一个支持AddRange的集合,例如List。

因此,首先使用Where来过滤Installed == true,然后使用ForEach对它们进行遍历:

printers.Where(p => p.Installed).ForEach(p => installedPrinters.Add(p));
foreach (var printer in printers.Where (p => p.Installed) { installedPrinters.Add(printer); }

尝试这个

printer.Where(x => x.Installed).ToList()
      .ForEach(
          p=>
            {
              installedPrinters.Add(p)
            }
);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM