如果第一个集合是空的,Linq Concat应该工作吗?

时间:2016-02-03 15:59:04

标签: c# linq

我现在在LinqPad工作。我有以下2行代码:

roleAssnd.Concat(roleAssnd2);
roleAssnd.Dump();

如果我在Concat之前查看这两个项目(roleAssndroleAssnd2),roleAssnd有0条记录,而roleAssnd2有3条。但是,在Concat之后, roleAssnd仍为0。

我认为它会有3.

这只是一个LinqPad问题吗?如果它应该如何工作,我该如何处理第一个集合为空的可能性?

2 个答案:

答案 0 :(得分:3)

Concat适用于空集合,唯一的事情是将结果分配回(到新列表或现有列表)

Concat不会修改集合。

Enumerable.Concat<TSource> Method

  

立即r eturn值是一个存储所有内容的对象   执行操作所需的信息。查询   在对象之前,不会执行此方法表示的方法   列举的

如果您想将结果分配回roleAssnd,请使用:

roleAssnd = roleAssnd.Concat(roleAssnd2).ToList();

或者,您也可以使用AddRange ,因为它是List<T>之类的:

roleAssnd.AddRange(roleAssnd2);

答案 1 :(得分:3)

LINQ是IEnumerable<T>接口上的扩展方法的集合。这些实际上并没有改变集合,而是返回一个新的枚举,它将产生操作的结果。

你可以写roleAssnd.Concat(roleAssnd2).Dump();

var result = roleAssnd.Concat(roleAssnd2);
result.Dump();

编辑: 查看它的一种方法是将其与以下

进行比较
int x = 1;
int y = 2;
x + y; // note, this won't even compile
x.Dump();

+实际上并未修改x,它会返回您必须检查的新结果。