C# 深拷贝
测试实体:
class Test
{
public int Age { get; set; } = 1;
public string Sex { get; set; } = "男";
public Name Name { get; set; } = new Name() { Name_ = "周杰伦", Second = new Second() { Num = 1 } };
}
class Name
{
public string Name_ { get; set; }
public Second Second { get; set; }
}
class Second
{
public int Num { get; set; }
}
测试:
public static T DeepCopy<T>(T obj)
{
//如果是字符串或值类型则直接返回
if (obj is string || obj.GetType().IsValueType) return obj;
object retval = Activator.CreateInstance(obj.GetType());
FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
foreach (FieldInfo field in fields)
{
try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); }
catch { }
}
return (T)retval;
}
static void Main()
{
Test test = new Test();
Console.WriteLine(test.Name.Second.Num);
Test test1 = DeepCopy(test);
test1.Name.Second.Num = 100;
Console.WriteLine(test1.Name.Second.Num);
Console.WriteLine(test.Name.Second.Num);
Console.ReadKey();
}
输出:
1
100
1
可见,不影响之前的对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了