手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#中4种深拷贝方法介绍
C#中4种深拷贝方法介绍
摘要:1:利用反射实现publicstaticTDeepCopy(Tobj){//如果是字符串或值类型则直接返回if(objisstring||o...

1:利用反射实现

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; }

2:利用xml序列化和反序列化实现

public T DeepCopy<T>(T obj) { object retval; using (MemoryStream ms = new MemoryStream()) { XmlSerializer xml = new XmlSerializer(typeof(T)); xml.Serialize(ms, obj); ms.Seek(0, SeekOrigin.Begin); retval = xml.Deserialize(ms); ms.Close(); } return (T)retval; }

3:利用二进制序列化和反序列化实现

public static T DeepCopy<T>(T obj) { object retval; using (MemoryStream ms = new MemoryStream()) { BinaryFormatter bf = new BinaryFormatter(); //序列化成流 bf.Serialize(ms, obj); ms.Seek(0, SeekOrigin.Begin); //反序列化成对象 retval = bf.Deserialize(ms); ms.Close(); } return (T)retval; }

4:利用silverlight DataContractSerializer实现,用于在silverlight 客户端使用

public static T DeepCopy<T>(T obj) { object retval; using (MemoryStream ms = new MemoryStream()) { DataContractSerializer ser = new DataContractSerializer(typeof(T)); ser.WriteObject(ms, obj); ms.Seek(0, SeekOrigin.Begin); retval = ser.ReadObject(ms); ms.Close(); } return (T)retval;

补充:第一个已经通过递归实现了深拷贝。

【C#中4种深拷贝方法介绍】相关文章:

C#中执行批处理文件(*.bat)的方法代码

C#中方法的详细介绍

C#中timer类的用法总结

C#下解析HTML的两种方法介绍

C#.net中的类型转换详细介绍

C#中的yield关键字的使用方法介绍

C#实现窗体淡入淡出效果的方法总结

C# 写入XML文档三种方法详细介绍

C#计算代码执行时间的方法

C#中分部类和分部方法的应用

精品推荐
分类导航