TakeWhile,但得到的是停止它也元素(TakeWhile, but get the eleme

2019-06-26 22:12发布

我想使用LINQ TakeWhile功能上的LINQ到对象。 但是,我还需要知道的第一个元素“爆发”的功能,即当条件是不正确的第一要素。

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

例如,给定一组{1, 2, 3, 4, 5, 6, 7, 8}

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

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

Answer 1:

我想你可以使用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;
    }
}


Answer 2:

LINQ到对象不具备这样的运营商。 但它直接实现一个TakeUntil自己扩展。 这里有一个这样的实现从moreLinq 。



Answer 3:

纯娱乐:

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


文章来源: TakeWhile, but get the element that stopped it also