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
相关产品推荐
相关产品推荐

