循环访问列表并执行函数

本文关键字:执行 函数 列表 访问 循环 | 更新日期: 2023-09-27 18:35:02

我有一个对象模型,其中包含多个其他对象的列表。我想循环思考列表中的每个对象并对其执行方法。该方法称为 MyMethod,列表中的每个对象在其类定义中都有此方法。

这是我所拥有的:

public class MyObject
{
  public List<NestedObject1> ListNestedObject1 { get; set; }
  public List<NestedObject2> ListNestedObject2 { get; set; }
  public void ExecuteMethodsOfNestedObjectLists()
  {
    if (ListNestedObject1.Count > 0) { from a in ListNestedObject1 a.MyMethod();}
    if (ListNestedObject2.Count > 0) { from a in ListNestedObject2 a.MyMethod();}
  }
}

我希望测试每个嵌套对象列表的长度,并对每个元素执行MyMethod。我知道我可以做一个 foreach 循环,但我想看看如何使用 linq 语法来保持简短。

如何重写它以使其工作?

谢谢。

循环访问列表并执行函数

所以你问如何为每个嵌套对象执行这个方法?

ListNestedObject1.ForEach(obj => obj.MyMethod());
ListNestedObject2.ForEach(obj => obj.MyMethod()); 

注意:List.ForEach不是 LINQ(尽管它具有类似的外观(,而是在 .NET 2.0 中引入的。

你应该使用 foreach 循环。 这就是它的用途。

Linq 设计用于查询数据,并非旨在用于引起副作用。 似乎您正在寻找的是 Linq ForEach 扩展方法。 Eric Lippert解释了为什么如果你有兴趣,可以更详细地从语言中省略这一点。

你当然可以自由地忽略这些哲学问题,写出你自己的ForEach方法。

而不是

 if (ListNestedObject1.Count > 0) { from a in ListNestedObject1 a.MyMethod(); }

    if (ListNestedObject1.Count > 0)
    { 
        ListNestedObject1.Select(
        a=>
            { 
                a.MyMethod(); 
                return a;
            } 
    }

以类似方式替换ListNestedObject2查询

你可以使用 List<T> 中的 ForEach 扩展方法,它实际上与 foreach 循环相同。请注意,这在IEnumerable<T>上不可用,并且通常是否应该使用它而不是foreach循环存在很大争议。

MyObject.ListNestedObject1.ForEach(MyMethod);
MyObject.ListNestedObject2.ForEach(MyMethod);