关于c#:将foreach转换为LINQ

Transform foreach to LINQ

本问题已经有最佳答案,请猛点这里访问。

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

第一个是IList,第二个是Dictionary

我需要遍历ilist,如果条件已满,则从存储在Dictionary中的某个对象激活方法。

目前的情况是这样的:

1
2
3
4
5
6
7
 foreach (MyObject mo in MyListOfObjects)
 {
      if (mo.Active == myStatus.Enabled)
      {
           DictList[mo.ID].Start();
      }
  }

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

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

但我不知道该如何包括在这个DictList[mo.ID].Start();


对LINQ的使用不是很好,但是您可以使用LINQ过滤列表,然后循环使用它。

1
2
3
4
5
6
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取下来。

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

但这就是你应该做的全部——它是完全可读和可维护的。


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

找到ForEach:https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.foreach?视图=NetFramework-4.7.2