C#实现Dictionary字典赋值的方法

作者:Czhenya 时间:2021-12-09 17:55:40 

Dictionary<TKey,TValue> 类,表示键和值的集合。

Dictionary<TKey,TValue> 泛型类提供一组键到一组值的映射。 每次对字典的添加都包含一个值和与其关联的键。 使用其键检索值的速度非常快。

之前使用Dictionary,也没遇到什么问题,感觉很方便,通过键值对的形式进行新建 – 存储 – 校验Key/Value是否存在 – 读取 – 修改/移除维护,一切正常。 近期取犯了一个不应该犯的错 – 赋值。


class Program
   {      
       static List<List<int>> handCards = new List<List<int>>();
       static void Main(string[] args)
       {
 //声明 赋值
           Dictionary<int, int> dic1 = new Dictionary<int, int>();
           dic1.Add(1, 1);
           dic1.Add(2, 2);

Dictionary<int, int> dic2 = dic1;
           dic2.Add(3, 3);
           dic2.Add(4, 4);

foreach (var item in dic1.Keys)
           {
               Console.WriteLine("dic1 : " + dic1[item]);

}
           foreach (var item in dic2.Keys)
           {
               Console.WriteLine("dic2 : " + dic2[item]);

}
       }
   }

C#实现Dictionary字典赋值的方法

这种赋值的方式是直接将dic2指向了dic1的内存地址,其实就是一个人,叫两个名字而已,所以这时不管你叫谁他都有反应, 即对dic1和dic2进行的所有操作都是一个内存地址进行修改,也就是说对dic1修改就是对dic2修改。

对于这种概念,我们最初学习引用类型的时候就已经有过接触了,所以说,大家也基本不会犯这样的错误。

需要注意的是,当我们使用Dic作为参数的时候,对它遍历时,尽量不要在外部对它进行添加/删除元素,否则可能会遇到这错:Unity 报错 之 InvalidOperationException: out of sync。

还有一种情况就是,当我们需要多个操作校验的时候,有多个方法同时执行,对这个Dic进行操作,也会产生问题。

那么,问题来了,想像值类型那么赋值该怎么写呢?


class Program
   {      
       static List<List<int>> handCards = new List<List<int>>();
       static void Main(string[] args)
       {  
           //声明 赋值
           Dictionary<int, int> dic3 = new Dictionary<int, int>();
           dic3.Add(1, 1);
           dic3.Add(2, 2);

//相当于值类型赋值
           Dictionary<int, int> dic4 = new Dictionary<int, int>(dic3);
           dic4.Add(3, 3);
           dic4.Add(4, 4);

foreach (var item in dic3.Keys)
           {
               Console.WriteLine("dic3 : " + dic3[item]);

}
           foreach (var item in dic4.Keys)
           {
               Console.WriteLine("dic4 : " + dic4[item]);

}
       }
   }

C#实现Dictionary字典赋值的方法

这样的话就可以只是用Dictionary的值,新开辟了一块内存地址,而不会对它本身有影响。

来源:https://blog.csdn.net/Czhenya/article/details/103673322

标签:C#,Dictionary,字典,赋值
0
投稿

猜你喜欢

  • C# Ini文件操作实例

    2022-12-31 00:37:45
  • Java基础之反射

    2021-12-20 17:20:20
  • js判断是否含有GBK以外的字符的函数

    2022-01-25 16:47:52
  • mybatis拦截器与分页插件实例教程

    2021-11-16 15:41:48
  • java实现在线聊天系统

    2021-07-30 08:20:54
  • java实现动态 代理方法浅析

    2023-11-28 23:33:59
  • C#读取XML的三种实现方式

    2023-02-08 10:07:01
  • 详解Android 中的文件存储

    2023-12-21 17:44:44
  • MyBatis动态SQL标签用法实例详解

    2023-11-26 01:04:27
  • Android实现跳动的小球加载动画效果

    2022-01-24 19:43:28
  • Android实现蓝牙聊天功能

    2023-06-10 01:19:48
  • C#利用Label标签控件模拟窗体标题的移动及窗体颜色不断变换效果

    2021-06-22 16:55:51
  • Kotlin协程Channel源码示例浅析

    2023-06-14 22:54:08
  • 详解spring security之httpSecurity使用示例

    2023-08-03 09:46:17
  • 详解springboot测试类注解

    2023-06-04 21:04:37
  • c++难以发现的bug(有趣)

    2022-01-27 17:01:41
  • Spring boot中PropertySource注解的使用方法详解

    2022-07-30 02:29:57
  • 基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例

    2022-06-24 08:07:48
  • Idea热加载插件JRebel激活以及使用教程

    2022-03-27 18:16:34
  • java通过AES生成公钥加密数据ECC加密公钥

    2023-08-04 10:09:53
  • asp之家 软件编程 m.aspxhome.com