我在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
集合的引用?
答案 0 :(得分:5)
罪魁祸首在于:p.OrgID = u.tre.First().orgid
您不是“复制”对象,因此alleSkjema
中包含的项目是newGroupList
中包含的项目的超集。要明确的是,如果X
中包含alleSkjema
并且X
通过了测试,那么X
会被放入newGroupList
。相同的X
,而不是X
的副本。这是因为您的对象是引用类型。
答案 1 :(得分:0)
您的alleSkjema
变量根本没有修改过。但是,它似乎包含引用以及那些引用指向的实例由您的最后一行修改。