对象深拷贝的替代方法

codemonkey112 2017-03-06 11:00:13
各位大神好!
小弟遇到一个问题,一个对象,我需要反复对这个对象调用和处理,但是不想改变他的初始值,用什么方法比较好?
我现在是给那个对象的类建了一个clone()方法,对象初始化已后,每次处理时,复制一个副本,在副本上修改,但是感觉这样很繁琐,没有 对象复用的好方法,不用深拷贝?
...全文
413 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hiose89 2017-03-06
  • 打赏
  • 举报
回复
你真是牛,又不想自己赋值 又不想拷贝,那只有序列化吧。
xdashewan 2017-03-06
  • 打赏
  • 举报
回复
引用 5 楼 yyaannggem 的回复:
可能我表达错了,不一定是复制最初始的对象,也可能是复制 之后修改过的 对象
如果这样,我倒是觉得clone没什么问题。当然你也可以学datatable添加old字段来保存之前的值,set方法里对其赋值,好处是不修改的字段不会赋值old,坏处是同一字段只能保存一个旧值,不如clone随意保存副本。还是取决于你使用的场景如何
xiaoyu5425 2017-03-06
  • 打赏
  • 举报
回复
再加个构造函数
codemonkey112 2017-03-06
  • 打赏
  • 举报
回复
引用 3 楼 xdashewan 的回复:
构造函数里直接赋默认值不就好了,每次new一个
可能我表达错了,不一定是复制最初始的对象,也可能是复制 之后修改过的 对象
codemonkey112 2017-03-06
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
用struct就行了,保证不会改到初始值
类型里边有引用类型的数据,好像结构里不建议有引用类型数据吧?
xdashewan 2017-03-06
  • 打赏
  • 举报
回复
构造函数里直接赋默认值不就好了,每次new一个
幻夢之葉 2017-03-06
  • 打赏
  • 举报
回复
加个函数,把对象重置为原始状态
Poopaye 2017-03-06
  • 打赏
  • 举报
回复
用struct就行了,保证不会改到初始值
闭包客 2017-03-06
  • 打赏
  • 举报
回复
引用类型的深拷贝一直都是难题,没有更好的办法。 只有改变程序的设计,使其并不需要使用深拷贝。
  • 打赏
  • 举报
回复
二进制序列化比较简单 byte[] data = BinarySerializer.Serialize(rawModel); 只要一份Stream或byte[] for (int i = 1; i <= 复制次数; ++i) { //stream.Position = 0; var model = BinarySerializer.Deserialize<Model>(data); //修改指定的值 model.xxx = 新值 } 效率应该还不错
xuggzu 2017-03-06
  • 打赏
  • 举报
回复
可能用初始值,也可能用变动后的值,又不想改变实例里面的已有值,除了临时复制实例或者将实例成员值放到其它地方外,还真想不出什么其它方法……

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧