TakeWhile,但也得到了阻止它的元素

Dav*_*fer 17 .net c# linq linq-to-objects

我想TakeWhile在LINQ to Objects上使用LINQ 函数.但是,我还需要知道"破坏"函数的第一个元素,即条件不正确的第一个元素.

是否有一个函数可以获取所有不匹配的对象,加上第一个对应的函数?

例如,给定集合{1, 2, 3, 4, 5, 6, 7, 8},

mySet.MagicTakeWhile(x => x != 5);
Run Code Online (Sandbox Code Playgroud)

=> {1, 2, 3, 4, 5}

Maa*_*ten 13

我想你可以使用SkipWhile,然后选择第一个元素.

var elementThatBrokeIt = data.SkipWhile(x => x.SomeThing).Take(1);
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果需要单个扩展方法,可以使用以下方法:

public static IEnumerable<T> MagicTakeWhile<T>(this IEnumerable<T> data, Func<T, bool> predicate) {
    foreach (var item in data) {
        yield return item;
        if (!predicate(item))
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)


Ani*_*Ani 7

LINQ to Objects没有这样的运算符.但是TakeUntil 自己实施扩展是很简单的.这是来自moreLinq一个这样的实现.

  • "TakeUntil`"这个名字没有传达意义.从盒子里拿出`````````````````````````````````````````````````` (5认同)
  • TakeUntil现已包含在MoreLinq NuGet中.这里还有来自GitHub的更新链接:https://github.com/morelinq/MoreLINQ/blob/master/MoreLinq/TakeUntil.cs (2认同)