TakeWhile, but get the element that stopped it also

后端 未结 3 638
栀梦
栀梦 2021-01-17 08:50

I\'d like to use the LINQ TakeWhile function on LINQ to Objects. However, I also need to know the first element that \"broke\" the function, i.e. the first elem

3条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-17 09:34

    I think you can use SkipWhile, and then take the first element.

    var elementThatBrokeIt = data.SkipWhile(x => x.SomeThing).Take(1);
    

    UPDATE

    If you want a single extension method, you can use the following:

    public static IEnumerable MagicTakeWhile(this IEnumerable data, Func predicate) {
        foreach (var item in data) {
            yield return item;
            if (!predicate(item))
                break;
        }
    }
    

提交回复
热议问题