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

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

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

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

 mySet.MagicTakeWhile(x => x != 5); 

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

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

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

UPDATE

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

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

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

纯娱乐:

 var a = new[] { "two", "three", "four", "five", }; Func predicate = item => item.StartsWith("t"); a.TakeWhile(predicate).Concat(new[] { a.SkipWhile(predicate).FirstOrDefault() })