Transform foreach to LINQ



我有两个集合,都包含对象。

第一个是IList,第二个是Dictionary

我需要穿越ILIST,如果填充条件,则从Dictionary中存储的某些对象激活方法。

当前情况就是这样:

 foreach (MyObject mo in MyListOfObjects)
 {
      if (mo.Active == myStatus.Enabled)
      {
           DictList[mo.ID].Start();
      }
  }

到目前为止,我已经做到了:

var r = MyListOfObjects.Where(mo => mo.Active == myStatus.Enabled);

,但我不知道如何包括此DictList[mo.ID].Start();

不是linq的很好使用,但是您可以使用linq进行过滤列表,然后循环循环。

var itemsToStart = MyListOfObjects.Where(mo => mo.Active == myStatus.Enabled)
    .Select(mo=> DictList[mo]); //or ToList() if you intend to re-iterate 
foreach (var itemToStart in itemsToStart) {
    itemToStart.Start();
}

如果有的话,只需删除内部if

foreach (MyObject mo in MyListOfObjects.Where(x => x.Active == myStatis.Enabled))
{
     DictList[mo.ID].Start();
}

但这是 all 您应该这样做 - 它是完全可读且可维护的。

MyListOfObjects.Where(mo => mo.Active == myStatus.Enabled).ToList().ForEach(mo => DictList[mo.ID].Start());

ForEach找到:https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.generic.list-1.foreach?view=netframeworkwit = netframework-4.7.7.2

最新更新