【发布时间】:2018-01-28 07:37:53
【问题描述】:
我有一个使用 linq ForEach 更新时获取的对象列表。问题是数据正在使用引用类型进行更新。我想用值类型更新它
我尝试进行克隆,但没有成功(不确定我是否遵循了正确的程序)。
【问题讨论】:
我有一个使用 linq ForEach 更新时获取的对象列表。问题是数据正在使用引用类型进行更新。我想用值类型更新它
我尝试进行克隆,但没有成功(不确定我是否遵循了正确的程序)。
【问题讨论】:
您的列表newSetRatio 在if 条件下被清空。如果该条件返回false,它将包含上一次迭代的值。由于它在每次迭代中填充,在条件之外,每当条件返回 false 时,assetSharingRatios 中的所有项目都将被添加,而列表之前不会被清除。因此,如果assetSharingRatios 没有更改并且您的代码返回false,newSetRatio 将包含所有重复项。如果条件继续导致false,newSetRatio 中的项目将增加三倍,依此类推。
还有一点是你的最后一行代码contributePartnersData.assetSharingRatio = newSetRatio;
如果您修复了newSetRatio 行为,那么只要if 条件为false,添加到contributingPartnersData 中的最后一项将获得新的assetSharingRatio 值。不确定这是不是故意的,看起来有点奇怪。这就是为什么最后三行代码在“if”之外的原因吗?
【讨论】:
newSetRatio = new List<AssetRatios>(); 放在 if 条件之外,但它不起作用,每当我更改列表 newSetRatio 的值时,它也会影响 assetSharingRatio 问题类似于link 中的问题,但我尝试了那里提供的解决方案,但它没有用
newSetRatio' it updates values in assetSharingRatios 上执行 .Foreach 时,这是一个问题吗?如果是这样,请将 newSetRatio.AddRange(assetSharingRatios.Where.... 更改为 newSetRatio = new List<AssetRatios>(assetSharingRatios.Where... 并告诉我是否有帮助