将单个元素添加到表达式的序列中

时间:2009-12-17 09:41:05

标签: c# linq sequence

想象一下,您希望选择一个序列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 个答案:

答案 0 :(得分:3)

另一种选择(可能更具可读性):

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))