我想使用LINQ TakeWhile
功能上的LINQ到对象。 但是,我还需要知道的第一个元素“爆发”的功能,即当条件是不正确的第一要素。
是否有一个函数来获取所有不匹配的对象,加上做的第一?
例如,给定一组{1, 2, 3, 4, 5, 6, 7, 8}
mySet.MagicTakeWhile(x => x != 5);
=> {1, 2, 3, 4, 5}
我想使用LINQ TakeWhile
功能上的LINQ到对象。 但是,我还需要知道的第一个元素“爆发”的功能,即当条件是不正确的第一要素。
是否有一个函数来获取所有不匹配的对象,加上做的第一?
例如,给定一组{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<T> MagicTakeWhile<T>(this IEnumerable<T> data, Func<T, bool> predicate) {
foreach (var item in data) {
yield return item;
if (!predicate(item))
break;
}
}
LINQ到对象不具备这样的运营商。 但它直接实现一个TakeUntil
自己扩展。 这里有一个这样的实现从moreLinq 。
纯娱乐:
var a = new[]
{
"two",
"three",
"four",
"five",
};
Func<string, bool> predicate = item => item.StartsWith("t");
a.TakeWhile(predicate).Concat(new[] { a.SkipWhile(predicate).FirstOrDefault() })