为什么我的GroupBy - > SelectMany例程正常工作?

Chr*_*ård 0 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);
Run Code Online (Sandbox Code Playgroud)

哪里alleSkjemaIEnumerable<T>一些性质.OrgID是一个部门ID,T在此上下文中是一个人.

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

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

xan*_*tos 5

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

您不是"复制"对象,因此包含的项目是所包含项目alleSkjema的超集newGroupList.要明确的是,如果X包含alleSkjemaX通过测试,则将X其放入newGroupList.同样的X,不是副本X.这是因为您的对象是引用类型.

  • @ChristianWattengård是的,就像你说的那样. (3认同)