Search code examples
c#loopsdelegates

How do I exit a List<string>.ForEach loop when using an anonymous delegate?


In a normal loop, you can break out of a loop using break. Can the same be done using an anonymous delegate?

Example inputString and result are both declared outside the delegate.

blackList.ForEach(new Action<string>(
    delegate(string item)
    {
        if(inputString.Contains(item)==true)
        {
            result = true;
            // I want to break here
        }
    }
));

Edit: I'm actually reading your book at the minute John :). Just for the record, I hit this issue and switched back to a normal foreach loop. But I posted this question to see if I missed something.


Solution

  • As others have posted, you can't exit the loop in ForEach.

    Are you able to use LINQ? If so, you could easily combine TakeWhile and a custom ForEach extension method (which just about every project seems to have these days).

    In your example, however, List<T>.FindIndex would be the best alternative - but if you're not actually doing that, please post an example of what you really want to do.