2012-05-23 25 views
0

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

我该如何改写它才能使其工作?

谢谢。

回答

2

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

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

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

+0

好的,谢谢,这就是我一直在寻找的东西。 – frenchie

0

而不是

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

使用

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

同样替换查询ListNestedObject2

1

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

Linq专为查询数据而设计,并不旨在用于引起副作用。看来你正在寻找的是Linq ForEach扩展方法。 Eric Lippert explains为什么这是故意省略如果您有兴趣,请从语言中更详细地了解。

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

+0

好的,感谢您的链接。 – frenchie

0

您可以使用的ForEach扩展方法,该方法与foreach循环相同。请注意,这在IEnumerable<T>上不可用,并且一般而言,关于是否应该使用这种替代foreach循环的争论很大。

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