循环遍历列表并执行功能

时间:2012-05-23 15:26:55

标签: c#

我有一个包含多个其他对象列表的对象模型。我想循环思考列表中的每个对象并对它们执行一个方法。该方法称为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语法来缩短它。

如何重写它以使其有效?

感谢。

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

Linq专为查询数据而设计,并非设计用于引起副作用。您正在寻找的是Linq ForEach扩展方法。 Eric Lippert explains如果您有兴趣,可以更详细地从语言中故意省略

你当然可以自由地忽视这些哲学问题并编写自己的ForEach方法。

答案 2 :(得分:0)

而不是

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

使用

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

ListNestedObject2

类似地替换查询

答案 3 :(得分:0)

您可以使用List<T>中的ForEach扩展方法,这与foreach循环非常相似。请注意,这不适用于IEnumerable<T>,一般来说,是否应该使用此代替foreach循环,这一点备受争议。

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