2009-12-17 6 views
3

Imaginez que vous souhaitiez sélectionner tous les éléments d'une séquence all, à l'exception des éléments contenus dans la séquence exceptions et l'élément unique otherException.Ajouter un seul élément à une séquence pour une expression

Y at-il une meilleure façon de faire cela? Je voudrais éviter de créer un nouveau tableau, mais je n'ai pas trouvé de méthode sur la séquence qui le cache avec un seul élément.

all.Except(exceptions.Concat(new int[] { otherException })); 

code source complet souci d'exhaustivité:

var all = Enumerable.Range(1, 5); 
int[] exceptions = { 1, 3 }; 
int otherException = 2; 
var result = all.Except(exceptions.Concat(new int[] { otherException })); 

Répondre

3

Une alternative (peut-être plus lisible) serait:

all.Except(exceptions).Except(new int[] { otherException }); 

Vous pouvez également créer une méthode d'extension qui convertit tout objet à un IEnumerable, rendant ainsi le code encore plus lisible:

public static IEnumerable<T> ToEnumerable<T>(this T item) 
{ 
    return new T[] { item }; 
} 

all.Except(exceptions).Except(otherException.ToEnumerable()); 

Ou si vous voulez vraiment un moyen réutilisable pour obtenir facilement une collection plus un élément:

public static IEnumerable<T> Plus<T>(this IEnumerable<T> collection, T item) 
{ 
    return collection.Concat(new T[] { item }); 
} 

all.Except(exceptions.Plus(otherException)) 
+0

oui, les méthodes d'extension serait la meilleure façon de procéder. – Axarydax