C#Lambda深度拷贝实现

班车上的技术交流有时候比会议室还高效。聊到 C#的深度拷贝,有同事说用Lambda 表达式拷贝对象虽然快,但嵌套对象搞不定。我一听不太信,回到办公室撸了个 Demo,调了几次代码,还真搞定了嵌套的深拷贝。

Lambda 写法简洁,性能也挺不错,尤其是在不想引入外部库的场景下,反射序列化的方式都不如它干净。像这种:

var copier = DeepCopier<;T>;.Create();
var copy = copier(original);

用泛型加表达式树,效率还蛮高,关键是自己能控制细节,不像一些封装好的库黑盒太多。哦对,Expression.MemberInitExpression.Bind这里是重点,别写错了。

如果你遇到对象里嵌套对象、List 嵌套引用对象的情况,可以考虑递归构造表达式树,虽然稍复杂点,但能实现真正的深拷贝。还有,性能瓶颈主要在初始化阶段,构建完 delegate 后用起来快。

你要是对其他语言的拷贝机制也感兴趣,这些文章可以顺便看看:

表达式树+泛型+缓存机制,搞定高性能深拷贝。如果你不想被 JSON 序列化的性能坑,那就试试这招。

rar 文件大小:56.67KB