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

C# 如何复制列表内容到临时列表且修改临时列表不影响原列表

你现有代码存在笔误:List<UserModel> TempUserModelList = new List<Items>(OriginalList);中的泛型参数Items需要改为UserModel才能正常编译。

问题原因

UserModel是引用类型,直接通过集合构造方法创建新列表时,仅会复制原列表中每个元素的内存引用,两个列表的元素实际指向堆内存中的同一个对象,因此修改临时列表的元素属性会同步影响原列表。

解决方案

方法1:手动逐属性拷贝(性能最优,适合属性较少的场景)

创建临时列表时,为每个原元素手动实例化新的UserModel对象并赋值属性:

List<UserModel> TempUserModelList = OriginalList.Select(u => new UserModel
{
    FirstName = u.FirstName,
    LastName = u.LastName,
    UserName = u.UserName,
    RestaurantName = u.RestaurantName
}).ToList();

方法2:封装克隆方法(适合需要多次复用拷贝逻辑的场景)

给UserModel类新增克隆方法,避免重复编写属性赋值代码:

public class UserModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string UserName { get; set; }
    public string RestaurantName { get; set; }

    public UserModel Clone()
    {
        return new UserModel
        {
            FirstName = FirstName,
            LastName = LastName,
            UserName = UserName,
            RestaurantName = RestaurantName
        };
    }
}

调用示例:

List<UserModel> TempUserModelList = OriginalList.Select(u => u.Clone()).ToList();

方法3:序列化通用深拷贝(适合属性较多、不想手动写赋值逻辑的场景)

通过JSON序列化反序列化实现通用深拷贝,不需要手动维护属性赋值逻辑:

using System.Text.Json;

public static class DeepCopyHelper
{
    public static T DeepCopy<T>(this T source)
    {
        var json = JsonSerializer.Serialize(source);
        return JsonSerializer.Deserialize<T>(json);
    }
}

调用示例:

List<UserModel> TempUserModelList = OriginalList.Select(u => u.DeepCopy()).ToList();

注意:如果类中包含不可序列化的成员,或者存在复杂的引用类型嵌套,需要先确认序列化逻辑可覆盖所有需要拷贝的成员。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:27:09