[英]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.