我现在在LinqPad工作。我有以下2行代码:
roleAssnd.Concat(roleAssnd2);
roleAssnd.Dump();
如果我在Concat之前查看这两个项目(roleAssnd
和roleAssnd2
),roleAssnd
有0条记录,而roleAssnd2
有3条。但是,在Concat之后, roleAssnd
仍为0。
我认为它会有3.
这只是一个LinqPad问题吗?如果它应该如何工作,我该如何处理第一个集合为空的可能性?
答案 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
,它会返回您必须检查的新结果。