71 votes

Quel est votre opérateur LINQ to Objects préféré qui n’est pas intégré?

Avec les méthodes d'extension, nous pouvons écrire des opérateurs LINQ pratiques qui résolvent des problèmes génériques.

Je souhaite connaître les méthodes ou les surcharges qui vous manquent dans l'espace de noms System.Linq et leur implémentation.

Des implémentations propres et élégantes, utilisant peut-être des méthodes existantes, sont préférées.

33voto

Timwi Points 30896

Append & Prepend

 /// <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;
}
 

21voto

Ahmad Mageed Points 44495

Je suis surpris que personne n'a mentionné le MoreLINQ projet encore. Il a été lancé par Jon Skeet et a acquis une certaine développeurs le long du chemin. À partir de cette page:

LINQ to Objects est manquant un peu de les caractéristiques souhaitables.

Ce projet permettra d'améliorer LINQ to Les objets avec des méthodes supplémentaires, dans un manière qui les maintient à l'esprit de LINQ.

Regardez les Opérateurs Aperçu de la page du wiki pour obtenir une liste des opérateurs.

C'est certainement une bonne façon d'apprendre à partir de pur et élégant de code source.

16voto

flq Points 11937

Chaque

Rien pour les puristes, mais bon c'est utile!

  public static void Each<T>(this IEnumerable<T> items, Action<T> action)
 {
   foreach (var i in items)
      action(i);
 }
 

14voto

Timwi Points 30896

ToQueue & ToStack

 /// <summary>Creates a <see cref="Queue&lt;T&gt;"/> from an enumerable
/// collection.</summary>
public static Queue<T> ToQueue<T>(this IEnumerable<T> source)
{
    if (source == null)
        throw new ArgumentNullException("source");
    return new Queue<T>(source);
}

/// <summary>Creates a <see cref="Stack&lt;T&gt;"/> from an enumerable
/// collection.</summary>
public static Stack<T> ToStack<T>(this IEnumerable<T> source)
{
    if (source == null)
        throw new ArgumentNullException("source");
    return new Stack<T>(source);
}
 

13voto

Mashmagar Points 724

Est vide

 public static bool IsEmpty<T>(this IEnumerable<T> source)
{
    return !source.Any();
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X