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

不同DTO间参数赋值后for循环得到的obj1元素全部相同是什么问题

问题背景

以下是将一个DTO的参数赋值给另一个DTO的实现代码:

List<Projectdto> matchedProjects = new List<Projectdto>();
List<Projectdto> obj1 = new List<Projectdto>();
List<ProjectDTO> obj = matchedProjectsDetails;
Projectdto projectdto = new Projectdto();
for (int i = 0; i < matchedProjectsDetails.Count; i++)
{
    projectdto.Name = obj[i].Name;
    projectdto.PID = obj[i].PID;
    projectdto.PNKC = obj[i].MatchedPNKC;
    projectdto.PNKCCount = obj[i].MatchedPnkcCount;
    obj1.Add(projectdto);                                    
}

执行完上述for循环后,obj1中的所有元素参数都完全相同,问题原因及修复方案如下:

错误原因

Projectdto属于C#中的引用类型,代码中该类的实例化操作放在了for循环外部,全程只有一个实例对象被创建。每次循环修改的都是该实例的属性,往obj1中添加的也只是该实例的内存引用,而非新的独立对象。最后一次循环的赋值会覆盖之前所有修改,导致列表内所有引用指向的对象属性值完全一致。

修复方案

将Projectdto实例化代码移动到for循环内部,每次循环创建一个新的独立实例:

List<Projectdto> matchedProjects = new List<Projectdto>();
List<Projectdto> obj1 = new List<Projectdto>();
List<ProjectDTO> obj = matchedProjectsDetails;
for (int i = 0; i < matchedProjectsDetails.Count; i++)
{
    // 每次循环创建新实例
    Projectdto projectdto = new Projectdto();
    projectdto.Name = obj[i].Name;
    projectdto.PID = obj[i].PID;
    projectdto.PNKC = obj[i].MatchedPNKC;
    projectdto.PNKCCount = obj[i].MatchedPnkcCount;
    obj1.Add(projectdto);                                    
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 19:36:08