【问题标题】:How to exit a Generic list ForEach with delegate?如何使用委托退出通用列表 ForEach?
【发布时间】:2009-04-30 09:34:55
【问题描述】:

如何使用代表退出通用列表 ForEach?中断或返回不起作用。

例子:

        Peoples.ForEach(delegate(People someone)
        {
            if(someone.Name == "foo")
               ???? What to do to exit immediatly ?
        });

【问题讨论】:

    标签: generics list foreach delegates


    【解决方案1】:

    ForEach 无法实现这一点。

    【讨论】:

      【解决方案2】:

      就这样写出来

      foreach(People someone in Peoples)
      {
          if(someone.Name == "foo") break;
          // rest of code below for != "foo"...
      }
      

      跳过 foo 并仍然为其他人执行您可以执行的操作

      if(someone.Name == "foo") continue;
      

      【讨论】:

        【解决方案3】:

        你可以这样做:

                Peoples.TakeWhile(p=> p.Name != "foo")
                    .ToList().ForEach(p => Console.WriteLine(p.Name));
        

        但这在性能方面是矫枉过正和糟糕的......

        只需使用简单的foreach 循环即可。

        【讨论】:

          【解决方案4】:

          虽然不建议您在满足条件时从 ForEach() 内部抛出异常。

          【讨论】:

          • 虽然很昂贵。异常不是程序正常行为的一部分,线索就在名称中。 :)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-25
          • 1970-01-01
          • 2011-01-16
          • 1970-01-01
          • 1970-01-01
          • 2010-12-13
          相关资源
          最近更新 更多