服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#实现Dictionary字典赋值的方法

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

2022-11-21 14:28Czhenya C#

本文主要介绍了C#实现Dictionary字典赋值的方法,如同java中的Hasttable,C#里面有Dictionary,可以实现很高效的键值对操作。感兴趣的可以了解一下

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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进行操作,也会产生问题。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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的值,新开辟了一块内存地址,而不会对它本身有影响。

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

原文链接:https://blog.csdn.net/Czhenya/article/details/103673322

延伸 · 阅读

精彩推荐
  • C#C#编程自学之数据类型和变量三

    C#编程自学之数据类型和变量三

    C#语言类型系统提出的一个核心概念装箱(boxing)拆箱(unboxing)。装箱和取消装箱的概念是C#的类型系统的核心。它在“值类型”和“引用类型”之间的架...

    C#教程网6742021-10-29
  • C#C#实现在启动目录创建快捷方式的方法

    C#实现在启动目录创建快捷方式的方法

    这篇文章主要介绍了C#实现在启动目录创建快捷方式的方法,涉及C#快捷方式的创建技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    我心依旧7892021-10-25
  • C#C#无边框窗体实现以及拖动代码

    C#无边框窗体实现以及拖动代码

    我们给大家分享了关于C#无边框窗体实现以及拖动代码,大家在程序设计的时候如果用的到一起跟着小编学习下吧。...

    C#教程网5752022-02-21
  • C#C#使用SqlServer作为日志数据库的设计与实现

    C#使用SqlServer作为日志数据库的设计与实现

    这篇文章主要给大家介绍了关于C#使用SqlServer作为日志数据库的设计与实现的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一...

    亮大大大3662022-10-26
  • C#C#获取注册表指定键值操作

    C#获取注册表指定键值操作

    这篇文章主要介绍了C#获取注册表指定键值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    秋漓3422022-10-21
  • C#C# 时间与时间戳互转的方法(13位)

    C# 时间与时间戳互转的方法(13位)

    这篇文章主要介绍了C# 时间与时间戳互转的方法(13位),详细的介绍了常出现的几种时间方式及其时间与时间戳互转的方法,非常具有实用价值,希望此文章...

    代码描绘人生5932022-03-02
  • C#C#使用Http Post方式传递Json数据字符串调用Web Service

    C#使用Http Post方式传递Json数据字符串调用Web Service

    这篇文章主要为大家详细介绍了C#使用Http Post方式传递Json数据字符串调用Web Service,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    取啥名字9602022-01-19
  • C#C#简单实现发送socket字符串

    C#简单实现发送socket字符串

    这篇文章主要为大家详细介绍了C#简单实现socket字符串发送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    50%5322022-03-01