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

向List添加元素时覆盖原有值,所有元素均为最后一项值的问题排查

问题原因分析

你的问题核心是引用类型的赋值逻辑错误:

  • 虽然在循环里创建了Ausencias ausenc = new Ausencias();,但紧接着ausenc = aus;把传入的aus对象的引用直接赋值给了ausenc,这相当于放弃了刚创建的新对象,转而操作原始的aus对象。
  • 每次循环修改的都是同一个aus对象的PI_StartDate和PI_EndDate,然后把这个对象的引用重复添加到列表中。最终列表里的所有元素其实都是同一个对象的引用,自然显示的都是最后一次修改后的结果。
修复方案

需要创建新的Ausencias实例,并将原始aus对象的属性值复制到新实例中,再修改日期属性:

修复后的代码

public static List<Ausencias> SeparateMonth(Ausencias aus)
{
    List<Ausencias> ausencias = new List<Ausencias>();
    try
    {
        var resultSplit = Helper.SplitFechas(aus.PI_StartDate, aus.PI_EndDate);

        if (resultSplit.Count > Constant.ONE)
        {                 
            foreach (var item in resultSplit)
            {
                // 创建新实例并复制原始对象的属性,仅修改日期
                Ausencias ausenc = new Ausencias
                {
                    // 复制aus的其他需要保留的属性,示例:
                    // EmployeeId = aus.EmployeeId,
                    // Reason = aus.Reason,
                    PI_StartDate = item.StartDate,
                    PI_EndDate = item.EndDate
                };

                ausencias.Add(ausenc);
            }
        }
    }
    catch (Exception ex)
    {
        ex.Data.Clear();
    }
    return ausencias;
}

优化建议

如果Ausencias类属性较多,手动复制太繁琐,可以给类添加拷贝构造函数简化操作:

public class Ausencias
{
    // 拷贝构造函数,复制传入对象的所有属性
    public Ausencias(Ausencias other)
    {
        EmployeeId = other.EmployeeId;
        Reason = other.Reason;
        PI_StartDate = other.PI_StartDate;
        PI_EndDate = other.PI_EndDate;
        // 补充其他属性...
    }

    // 类的属性定义...
}

之后循环里可以这样写:

foreach (var item in resultSplit)
{
    Ausencias ausenc = new Ausencias(aus);
    ausenc.PI_StartDate = item.StartDate;
    ausenc.PI_EndDate = item.EndDate;
    ausencias.Add(ausenc);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:34:58