入门:从零开始掌握键值对集合)
我们在C#开发中经常需要存储成对的数据——例如“用户名”对应的“用户ID”、“商品编号”对应的“库存数量”等。这时DictionaryTKey, TValue字典就是我们最得力的助手。本文将带你从零开始系统地学习字典的核心概念、常用操作以及背后的注意事项每段代码都配有简洁注释命名规范清晰帮你快速上手。1. 什么是字典字典是一种泛型集合它存储的是键值对Key-Value Pair。每个键Key必须是唯一的通过键可以快速找到对应的值Value。它的底层实现是哈希表因此查找速度极快接近 O(1)。2. 创建字典class Program { static void Main() { // 方式1使用无参构造函数 Dictionarystring, int studentScores new Dictionarystring, int(); // 方式2指定初始容量可优化性能 Dictionarystring, string countryCapitals new Dictionarystring, string(10); // 方式3集合初始化器C# 3.0 Dictionaryint, string employeeNames new Dictionaryint, string { { 1001, 张三 }, { 1002, 李四 }, { 1003, 王五 } }; } }3. 添加与访问元素3.1 添加元素// 使用 Add 方法添加如果键已存在会抛出异常 studentScores.Add(小明, 95); studentScores.Add(小红, 88); // 使用索引器添加如果键已存在会覆盖旧值 studentScores[小刚] 78;3.2 访问元素// 通过键获取值如果键不存在会抛出 KeyNotFoundException int xiaomingScore studentScores[小明]; Console.WriteLine($小明的成绩{xiaomingScore}); // 安全访问使用 TryGetValue 避免异常 if (studentScores.TryGetValue(小华, out int score)) { Console.WriteLine($小华的成绩{score}); } else { Console.WriteLine(未找到小华的成绩); }4. 遍历字典4.1 遍历所有键值对// 使用 foreach 遍历 KeyValuePairTKey, TValue foreach (KeyValuePairstring, int kvp in studentScores) { Console.WriteLine($学生{kvp.Key}分数{kvp.Value}); } // 或者使用隐式类型 var foreach (var item in studentScores) { Console.WriteLine(${item.Key} 的分数是 {item.Value}); }4.2 仅遍历键或值// 遍历所有键 foreach (string name in studentScores.Keys) { Console.WriteLine($学生姓名{name}); } // 遍历所有值 foreach (int score in studentScores.Values) { Console.WriteLine($成绩{score}); }5. 常用属性和方法Count 获取字典中包含的键值对数量 Keys 获取包含所有键的集合 Values 获取包含所有值的集合 Clear() 移除所有元素 Remove(TKey) 移除指定键的元素返回是否成功 Add(TKey, TValue) 添加指定的键值对 ContainsKey(TKey) 判断是否包含指定键 ContainsValue(TValue) 判断是否包含指定值线性查找效率较低 TryGetValue(TKey, out TValue) 尝试获取指定键的值返回是否成功6. 性能与注意事项键的唯一性字典不允许重复键添加重复键会抛出ArgumentException。使用索引器赋值可以覆盖但Add方法会抛出异常。线程安全DictionaryTKey, TValue不是线程安全的。多线程环境请使用ConcurrentDictionaryTKey, TValue或加锁。容量优化如果预先知道元素数量在构造函数中指定容量可减少动态扩容带来的性能开销。遍历时不能修改在foreach遍历字典期间不能执行添加、删除等修改操作否则会抛出InvalidOperationException。如需修改可先记录键再遍历。总结DictionaryTKey, TValue是 C# 中最常用的键值对集合适合需要通过键快速查找值的场景。掌握Add、索引器、TryGetValue、foreach遍历、Keys/Values等核心操作。注意键的唯一性、线程安全以及遍历时禁止修改的规则。自定义类型作为键时务必重写Equals和GetHashCode。字典就像现实中的通讯录——通过姓名键快速找到电话号码值。理解并熟练运用字典能让你的代码更加高效、清晰。