你最喜欢的LINQ to Objects运算符是不是构建的

通过扩展方法,我们可以编写方便的LINQ操作符来解决一般问题。

我想知道在System.Linq命名空间中缺少哪些方法或重载以及如何实现它们。

清洁和优雅的实现,可能使用现有的方法,是首选。


追加和前置

/// <summary>Adds a single element to the end of an IEnumerable.</summary>
/// <typeparam name="T">Type of enumerable to return.</typeparam>
/// <returns>IEnumerable containing all the input elements, followed by the
/// specified additional element.</returns>
public static IEnumerable<T> Append<T>(this IEnumerable<T> source, T element)
{
    if (source == null)
        throw new ArgumentNullException("source");
    return concatIterator(element, source, false);
}

/// <summary>Adds a single element to the start of an IEnumerable.</summary>
/// <typeparam name="T">Type of enumerable to return.</typeparam>
/// <returns>IEnumerable containing the specified additional element, followed by
/// all the input elements.</returns>
public static IEnumerable<T> Prepend<T>(this IEnumerable<T> tail, T head)
{
    if (tail == null)
        throw new ArgumentNullException("tail");
    return concatIterator(head, tail, true);
}

private static IEnumerable<T> concatIterator<T>(T extraElement,
    IEnumerable<T> source, bool insertAtStart)
{
    if (insertAtStart)
        yield return extraElement;
    foreach (var e in source)
        yield return e;
    if (!insertAtStart)
        yield return extraElement;
}

我很惊讶没有人提到MoreLINQ项目。 它由Jon Skeet创建,并且一路上获得了一些开发人员。 从项目页面:

LINQ to Objects缺少一些理想的功能。

该项目将以一种保持LINQ精神的方式,通过额外的方法增强LINQ to Objects。

查看运营商概述wiki页面,查看已实施的运营商列表。

从一些干净优雅的源代码中学习是一种很好的方法。


纯粹主义者什么都没有,但它是有用的!

 public static void Each<T>(this IEnumerable<T> items, Action<T> action)
 {
   foreach (var i in items)
      action(i);
 }
链接地址: http://www.djcxy.com/p/42817.html

上一篇: What's your favorite LINQ to Objects operator which is not built

下一篇: Hidden features of Groovy?