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() })