循环访问列表并执行函数
本文关键字:执行 函数 列表 访问 循环 | 更新日期: 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);