用linq语句替换foreach语句

本文关键字:语句 foreach 替换 linq | 更新日期: 2023-09-27 18:12:38

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

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

我是Linq的新手,如果你能告诉我它在迭代一个集合时是如何工作的,我将不胜感激。

用linq语句替换foreach语句

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));

假设你的installeprinters实际上是一个支持adrange的集合,如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)
            }
);