找回密码
 立即注册

QQ登录

只需一步,快速开始

lakeonpeak
金牌服务用户   /  发表于:2017-7-23 12:43  /   查看:3356  /  回复:1
请问:为了实现C1Map操作的undo和redo功能,需对C1.Win.Map.VectorLayer的类对象进行深拷贝,但此类不能序列化(没有加[Serializable]),请问有什么可以完成此类对象的深拷贝呢?谢谢!

1 个回复

倒序浏览
JeffryLI
葡萄城公司职员   /  发表于:2017-7-24 10:33:55
沙发
您好,我尝试了下确实实现不了深拷贝,对于您的需求,目前可以通过数组来记录操作记录,然后完成redo和undo的操作,因为VectorLayer没有序列化,所以使用二进制流也没办法
  1. public static T DeepCopy<T>(T obj)
  2.                 {
  3.                         object retval;
  4.                         using (MemoryStream ms = new MemoryStream())
  5.                         {
  6.                                 BinaryFormatter bf = new BinaryFormatter();
  7.                                 //序列化成流
  8.                                 bf.Serialize(ms, obj);
  9.                                 ms.Seek(0, SeekOrigin.Begin);
  10.                                 //反序列化成对象
  11.                                 retval = bf.Deserialize(ms);
  12.                                 ms.Close();
  13.                         }
  14.                         return (T)retval;
  15.                 }
复制代码

还有一种办法就是您可以新建一个类,通过遍历的方式将操作的类赋给暂存类。不过这样的性能会有点慢。
希望能帮到您。
请点击评分,对我5分评价,谢谢!

葡萄城控件服务团队
官方网站: https://www.grapecity.com.cn/developer
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部