将foreach转换为LINQ

时间:2019-02-28 12:37:36

标签: c# 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();

中添加

3 个答案:

答案 0 :(得分:1)

不能很好地使用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();
}

答案 1 :(得分:0)

如果有什么需要,只需移除内部的if

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

但这就是所有您应该做的-它完全可读且可维护。

答案 2 :(得分:-2)

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

ForEachhttps://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.foreach?view=netframework-4.7.2