为什么我的GroupBy - > SelectMany常规工作?

时间:2016-02-18 12:38:38

标签: c# reference

我在6个多月前自己写过这篇文章,现在我不记得为什么会这样...

我有以下代码:

var grouped = alleSkjema.GroupBy(q => q.OrgID);
var newGroupList = grouped.Where(q => q.Count() < 4).SelectMany(p => p).ToList();
newGroupList.ForEach(p => p.OrgID = u.tre.First().orgid);

其中alleSkjema是具有某些属性的IEnumerable<T>OrgID是排序的部门ID,此上下文中的T是人。

我在上面的代码中所做的是将属于少于4人的部门的每个人分组到他们自己的小组中。这是出于匿名原因,对解决方案来说并不重要。

接下来会发生的是,只有上面的三行,alleSkjema被修改,我无法弄清楚原因。我猜可变性在屁股上咬我?我以为我需要在alleSkjema集合的最后一行做我正在做的事情,以获得预期的结果。 newGroupList是否包含对alleSkjema集合的引用?

2 个答案:

答案 0 :(得分:5)

罪魁祸首在于:p.OrgID = u.tre.First().orgid

您不是“复制”对象,因此alleSkjema中包含的项目是newGroupList中包含的项目的超集。要明确的是,如果X中包含alleSkjema并且X通过了测试,那么X会被放入newGroupList。相同的X,而不是X的副本。这是因为您的对象是引用类型。

答案 1 :(得分:0)

您的alleSkjema变量根本没有修改过。但是,它似乎包含引用以及那些引用指向的实例由您的最后一行修改。