簡體   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