Добавить отдельный элемент в последовательность для выражения - PullRequest
3 голосов
/ 17 декабря 2009

Представьте, что вы хотите выбрать все элементы одной последовательности all, кроме элементов, содержащихся в последовательности exceptions и одного элемента otherException.

Есть ли лучший способ сделать это, чем? Я бы хотел избежать создания нового массива, но я не смог найти метод в последовательности, который объединяет его с одним элементом.

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

полный исходный код для полноты:

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

1 Ответ

3 голосов
/ 17 декабря 2009

Альтернатива (возможно, более читаемая) будет:

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

Вы также можете создать метод расширения, который преобразует любой объект в IEnumerable, что делает код еще более читабельным:

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

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

Или, если вы действительно хотите многоразовый способ легко получить коллекцию плюс один предмет:

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

all.Except(exceptions.Plus(otherException))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...