c#静态扩展方法,字典的克隆扩展方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CS扩展 { class Program { static void Main(string[] args) { Dictionary<int, int> myDic = new Dictionary<int, int>(); myDic.Add(99, 56); myDic.Add(23, 11); Dictionary<int, int> tttdic = new Dictionary<int, int>(); tttdic = myDic.Clone(); Dictionary<int, int> xxxDic = new Dictionary<int, int>(); xxxDic = myDic; myDic[99] = 5555555; Console.WriteLine(myDic[99]); Console.WriteLine(tttdic[99]); Console.WriteLine(xxxDic[99]); Console.ReadKey(); } } public static class CSExtend { public static Dictionary<T, V> Clone<T, V>(this Dictionary<T, V> dictionary) { using (Stream objectStream = new MemoryStream())
{
//利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(objectStream, dictionary);
objectStream.Seek(0, SeekOrigin.Begin);
return (Dictionary<T, V>)formatter.Deserialize(objectStream);
}
} } }
c#静态扩展方法,字典的克隆扩展方法
这种方法是采用序列化反序列的克隆,是最靠谱的克隆,同样这种写法可以应用到类克隆,List克隆,都可以
参考文章:https://blog.csdn.net/alicehyxx/article/details/16118373
原方法:可自由修改
public static T Clone<T>(T RealObject) { using (Stream objectStream = new MemoryStream()) { //利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制 IFormatter formatter = new BinaryFormatter(); formatter.Serialize(objectStream, RealObject); objectStream.Seek(0, SeekOrigin.Begin); return (T)formatter.Deserialize(objectStream); } }
===========================2018年3月23日15:08:49更新==================================
万能克隆扩展方法
/// <summary> /// 深度克隆,字典和List可以直接.Clone,如果是类的话那个类必须得打上[Serializable]标签 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="RealObject"></param> /// <returns></returns> public static T Clone<T>(this T RealObject) { using (Stream objectStream = new MemoryStream()) { //利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制 IFormatter formatter = new BinaryFormatter(); formatter.Serialize(objectStream, RealObject); objectStream.Seek(0, SeekOrigin.Begin); return (T)formatter.Deserialize(objectStream); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~