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 语法来保持简短。

我如何重写它以使其工作?

谢谢。

4

4 回答 4

2

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

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

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

于 2012-05-23T15:34:28.060 回答
1

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

Linq 专为查询数据而设计,并非旨在用于产生副作用。看来您正在寻找的是一种 LinqForEach扩展方法。如果您有兴趣, Eric Lippert会更详细地解释为什么有意从语言中省略了这一点。

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

于 2012-05-23T15:32:17.267 回答
0

您可以使用ForEach扩展方法 from List<T>,这实际上与foreach循环相同。请注意,这在 上不可用IEnumerable<T>,并且一般来说,是否应该使用它来代替foreach循环存在很大争议。

MyObject.ListNestedObject1.ForEach(MyMethod);
MyObject.ListNestedObject2.ForEach(MyMethod);
于 2012-05-23T15:34:15.063 回答
0

代替

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

利用

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

类似地替换查询ListNestedObject2

于 2012-05-23T15:32:10.200 回答