3

想象一下,您想要选择一个序列中的所有元素,但序列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 }));
4

1 回答 1

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))
于 2009-12-17T09:44:12.920 回答