我正在尝试将此代码转换为linq:
foreach (var printer in printers)
{
if (printer.Installed)
installedPrinters.Add(printer);
}
我是Linq的新手,并希望在迭代一个集合时指出它是如何工作的。
答案 0 :(得分:3)
printers.Where(printer => printer.Installed)
.ToList()
.ForEach(printer => installedPrinters.Add(printer));
注意需要在ForEach之前调用ToList()(参见Lambda Expression using Foreach Clause)。
另请注意,虽然这样可行,但您的原始代码可能更容易阅读...... LINQ很酷但不觉得有必要将其用于所有内容:)
答案 1 :(得分:3)
如果您只是想创建一个新列表,您可以随时执行:
var installedPrinters = printers.Where(p => p.Installed).ToList();
如果要添加可能已包含项目的列表,则可以尝试:
installedPrinters.AddRange(printers.Where(p => p.Installed));
假设您的installedPrinters实际上是一个支持AddRange的集合,例如List。
答案 2 :(得分:1)
首先使用Where
过滤Installed == true,然后使用ForEach
运行它们:
printers.Where(p => p.Installed).ForEach(p => installedPrinters.Add(p));
答案 3 :(得分:0)
foreach (var printer in printers.Where (p => p.Installed) { installedPrinters.Add(printer); }
答案 4 :(得分:0)
试试这个
printer.Where(x => x.Installed).ToList()
.ForEach(
p=>
{
installedPrinters.Add(p)
}
);