You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新IEnumerable子集合元素属性会同步更新主集合吗?

问题解答

1. A中对应元素的属性会同步更新吗?

会。因为A.Where(x => x.Status == "N")返回的B并不是新创建的Price对象集合,而是原集合A中符合条件元素的引用视图。Price作为引用类型(类),A和B中的元素指向的是堆内存里的同一个实例。所以你遍历B修改元素的Date和Status属性时,本质上是直接修改了A中对应元素的实例属性,A里的元素自然会同步更新。

2. 基于B更新A中匹配元素的最优方式(针对值类型或新创建对象的场景)

如果你的场景中B是新创建的Price对象集合(而非原A的引用视图),或者Price是值类型,就可以利用你已实现的IEqualityComparer<Price>来高效匹配更新:

方式一:遍历B查找匹配元素更新(适合小型集合)

var priceComparer = new YourCustomPriceEqualityComparer();
foreach (var bPrice in B)
{
    // 从A中找到匹配元素
    var aPrice = A.FirstOrDefault(a => priceComparer.Equals(a, bPrice));
    if (aPrice != null)
    {
        aPrice.Date = bPrice.Date;
        aPrice.Status = bPrice.Status;
    }
}

方式二:转字典批量匹配更新(适合大型集合,提升效率)

如果A和B元素数量较多,先把B转成以元素为键的字典,利用哈希查找大幅提升匹配速度:

var priceComparer = new YourCustomPriceEqualityComparer();
var bPriceDict = B.ToDictionary(price => price, priceComparer);

foreach (var aPrice in A)
{
    if (bPriceDict.TryGetValue(aPrice, out var matchedBPrice))
    {
        aPrice.Date = matchedBPrice.Date;
        aPrice.Status = matchedBPrice.Status;
    }
}

如果A是List<Price>类型,用List.Find()替代FirstOrDefault,性能会更优。


内容的提问来源于stack exchange,提问作者user3121062

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:27:10