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

 更新时间:2021年05月28日 10:15:25   作者:Czhenya  
本文主要介绍了C#实现Dictionary字典赋值的方法,如同java中的Hasttable,C#里面有Dictionary,可以实现很高效的键值对操作。感兴趣的可以了解一下

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

111

这种赋值的方式是直接将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]);

            }
        }
    }

222

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

到此这篇关于C#实现Dictionary字典赋值的方法的文章就介绍到这了,更多相关C# Dictionary字典赋值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#使用LINQ查询操作符实例代码(一)

    C#使用LINQ查询操作符实例代码(一)

    这篇文章介绍了C#使用LINQ查询操作符的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#中的多播委托和泛型委托

    C#中的多播委托和泛型委托

    这篇文章介绍了C#中的多播委托和泛型委托,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C# 类的声明详解

    C# 类的声明详解

    本文主要对C# 类的声明进行详细介绍。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • 常用类之TCP连接类-socket编程

    常用类之TCP连接类-socket编程

    常用类之TCP连接类-socket编程...
    2007-03-03
  • C#调用usb摄像头的实现方法

    C#调用usb摄像头的实现方法

    这篇文章主要介绍了C#调用usb摄像头的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • C#中神器类BlockingCollection的实现详解

    C#中神器类BlockingCollection的实现详解

    如果你想玩转C# 里面多线程,工厂模式,生产者/消费者,队列等高级操作,就可以和我一起探索这个强大的线程安全提供阻塞和限制功能的C#神器类BlockingCollection吧
    2023-02-02
  • C#解决SQlite并发异常问题的方法(使用读写锁)

    C#解决SQlite并发异常问题的方法(使用读写锁)

    这篇文章主要介绍了C#解决SQlite并发异常问题的方法,通过使用读写锁达到多线程安全访问,进而解决SQLite并发异常的问题,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • C#使用CefSharp自定义缓存实现

    C#使用CefSharp自定义缓存实现

    本文介绍了如何使用C#和CefSharp自定义缓存实现减少Web应用程序的网络请求,提高应用程序性能。首先,本文讲解了CefSharp的基本知识和使用方法。然后,详细阐述了在CefSharp中实现自定义缓存的步骤和技巧。最后,通过实例演示了如何使用自定义缓存功能获取并展示网页数据
    2023-04-04
  • C#实现MP3播放器功能的示例代码

    C#实现MP3播放器功能的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现MP3播放器功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • Unity多语言转换工具的实现

    Unity多语言转换工具的实现

    这篇文章主要为大家详细介绍了Unity多语言转换工具的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06

最新评论