C#Lambda深度拷贝实现
班车上的技术交流有时候比会议室还高效。聊到 C#的深度拷贝,有同事说用Lambda 表达式拷贝对象虽然快,但嵌套对象搞不定。我一听不太信,回到办公室撸了个 Demo,调了几次代码,还真搞定了嵌套的深拷贝。
Lambda 写法简洁,性能也挺不错,尤其是在不想引入外部库的场景下,反射和序列化的方式都不如它干净。像这种:
var copier = DeepCopier<;T>;.Create();
var copy = copier(original);
用泛型加表达式树,效率还蛮高,关键是自己能控制细节,不像一些封装好的库黑盒太多。哦对,Expression.MemberInit
和Expression.Bind
这里是重点,别写错了。
如果你遇到对象里嵌套对象、List 嵌套引用对象的情况,可以考虑递归构造表达式树,虽然稍复杂点,但能实现真正的深拷贝。还有,性能瓶颈主要在初始化阶段,构建完 delegate 后用起来快。
你要是对其他语言的拷贝机制也感兴趣,这些文章可以顺便看看:
,表达式树+泛型+缓存机制,搞定高性能深拷贝。如果你不想被 JSON 序列化的性能坑,那就试试这招。
56.67KB
文件大小:
评论区