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

复制JSON对应类实例后修改新项致原项变更问题排查

问题根源:引用类型的浅拷贝导致原对象被修改

你遇到的问题是C#中引用类型的特性导致的:当你把oDORitem添加到集合时,并没有创建新的对象实例,只是把同一个对象的引用重复添加了进去。所以后续修改这个引用指向的对象时,原集合里的那个元素也会跟着改变——因为它们本质上是同一个对象。

具体分析你的代码

看这段关键代码:

OriginDestinationOptionRef oDORitem = originDestinationOptionRef.Last();
originDestinationOptionRef.Add(oDORitem); // 这里添加的是原对象的引用,不是新对象

此时originDestinationOptionRef集合里有三个元素,但后两个元素指向的是同一个OriginDestinationOptionRef实例。所以当你修改oDORitemModify(也就是这个共享实例)的uri、id和index时,原集合里的第二个元素自然也会被修改,就出现了你看到的结果。

修复方案:创建新的对象实例

你需要复制原对象的属性值到一个新的OriginDestinationOptionRef实例中,再把这个新实例添加到集合里,之后修改新实例的属性就不会影响原对象了。修改后的代码如下:

private void addFlightButton_Click(object sender, RoutedEventArgs e) {
    var originDestinationGroup = jsonObject.search.originDestinationGroup;
    OriginDestinationGroup oDGitem = originDestinationGroup.Last();
    var departureDateGroup = oDGitem.departureDateGroup;
    DepartureDateGroup dDGitem = departureDateGroup.Last();
    var originDestinationOptionRef = dDGitem.originDestinationOptionRef;
    OriginDestinationOptionRef oDORitem = originDestinationOptionRef.Last();

    // 关键:创建新的对象实例,复制原对象的属性
    OriginDestinationOptionRef newODORitem = new OriginDestinationOptionRef {
        uri = oDORitem.uri,
        id = oDORitem.id,
        index = oDORitem.index
    };

    // 添加新实例到集合
    originDestinationOptionRef.Add(newODORitem);

    // 基于原对象的值计算新的属性值
    char uriNumber = oDORitem.uri[oDORitem.uri.Length - 1];
    string uriString = oDORitem.uri.TrimEnd(uriNumber);
    int idNumber = Convert.ToInt32(oDORitem.id);
    int indexNumber = oDORitem.index;
    uriNumber++;
    idNumber++;
    indexNumber++;

    // 修改新实例的属性(不会影响原对象)
    newODORitem.uri = uriString + uriNumber.ToString();
    newODORitem.id = idNumber.ToString();
    newODORitem.index = indexNumber;
}

为什么这样能解决问题?

  • 新创建的newODORitem是一个独立的对象实例,和原oDORitem没有引用关系
  • 添加到集合后,集合里的元素都是各自独立的对象
  • 修改newODORitem的属性只会影响这个新对象,原对象的属性保持不变

这样修改后,你就能得到预期的JSON结果:原有的option/2元素保留,新添加的元素是option/3,不会出现原元素被修改的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:51:26