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);
        }
    }
复制代码

 

posted @   三页菌  阅读(268)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示