Union
可以删除重复项,而Concat
则不会。
因此,如果源中存在任何重复项或内部存在任何重复项,则它们会产生不同的结果。
如果您可以保证不存在重复项,或者只有很少的重复项且您不关心它们是否存在于输出中,Concat
将更快,因为无需针对已经生成的每个值测试它们。
但是,如果有许多重复项并且您不需要它们,则Union
中额外的处理以删除重复项可能会被您消耗结果的代码的节省所抵消。
你只关心执行速度吗?当你收到元素时,你需要多长时间来处理它?
Concat
更简单-它不需要执行任何处理,也不需要缓冲已返回的结果。然而,如果交集中有任何元素,它将产生更多结果。如果你需要花费较长时间处理每个结果,则Concat
可能会实际上变得更慢。
Union
将删除重复项,即使它们仅在两个列表中的一个中重复。 - Tim Schmelterpublic IEnumerable<MyObject> AllObjects
{
get
{
foreach (MyObject o1 in List1)
yield return o1;
foreach (MyObject o2 in List2)
yield return o2;
}
}