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

C#中泛型列表元素被覆盖,如何用同一类属性添加多条记录?

问题分析与解决方法

错误原因

你只创建了一个RecommendModel实例,C#里类属于引用类型,变量存储的是对象在内存中的地址。第一次添加到列表后,列表保存的是这个对象的引用;之后修改该实例的属性再添加,本质是把同一个内存地址又存了一次。列表里的两个元素指向的是同一个对象,所以最后看到的都是最后一次修改的属性值。

修正方法

要添加独立的多条记录,每次添加都需要创建新的RecommendModel实例,确保每个元素对应内存中不同的对象。

方法一:分步创建新实例

[HttpGet]
public ActionResult Questions()
{
    List<RecommendModel> recommends = new List<RecommendModel>();
    
    // 创建第一个实例并赋值添加
    RecommendModel model1 = new RecommendModel();
    model1.ID = 55;
    model1.Name = "First";
    recommends.Add(model1);
    
    // 创建第二个实例并赋值添加
    RecommendModel model2 = new RecommendModel();
    model2.ID = 56;
    model2.Name = "Second";
    recommends.Add(model2);
    
    var list = recommends; // 此时列表包含两个独立对象
}

方法二:用对象初始化器简化代码

这种写法更简洁,直接在Add方法中创建新实例并初始化属性:

[HttpGet]
public ActionResult Questions()
{
    List<RecommendModel> recommends = new List<RecommendModel>();
    
    recommends.Add(new RecommendModel { ID = 55, Name = "First" });
    recommends.Add(new RecommendModel { ID = 56, Name = "Second" });
    
    var list = recommends;
}

核心要点

对于引用类型,列表中存储的是对象的引用,而非对象本身。如果要保存多个不同的对象状态,必须为每个记录创建新的实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:15:31