【问题标题】:Looping through list and executing function循环遍历列表并执行函数
【发布时间】:2012-05-30 04:33:01
【问题描述】:

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

如何重写它以使其工作?

谢谢。

【问题讨论】:

    标签: c#


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      您当然可以无视这些哲学问题并编写自己的ForEach 方法。

      【讨论】:

        【解决方案3】:

        代替

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

        使用

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

        类似地替换查询ListNestedObject2

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2017-10-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-21
            • 2017-11-06
            • 2010-09-23
            • 2020-12-22
            相关资源
            最近更新 更多