网络宝典
第二套高阶模板 · 更大气的阅读体验

C#字典类型:存数据像查电话簿一样简单

发布时间:2026-03-26 10:30:23 阅读:3 次

你在写程序时,有没有遇到过这种场景:要根据一个名字快速找到对应的年龄、手机号或用户权限?比如登录系统后,根据用户名立刻拿到他的角色等级;或者读取配置文件,按键名取值。这时候,Dictionary<TKey, TValue> 就是你的得力助手。

字典不是数组,也不是列表

刚学 C# 的朋友容易把 DictionaryList<T> 搞混。List 是靠下标(0、1、2…)找元素,而 Dictionary 靠的是“键”(key)——就像电话簿里查人,你输“张三”,它立马翻出号码,不用从第一页开始数。

怎么声明和用?上手就跑通

最常见的是字符串当键、整数当值:

var userScores = new Dictionary<string, int>();
userScores["小明"] = 95;
userScores["小红"] = 87;
userScores["小刚"] = 92;

取值也直白:

int xiaoMingScore = userScores["小明"]; // 得到 95

注意:如果键不存在,直接用方括号访问会抛异常。更稳妥的写法是用 TryGetValue

if (userScores.TryGetValue("小李", out int score))
{
Console.WriteLine($"小李分数:{score}");
}
else
{
Console.WriteLine("还没录入小李的成绩");
}

键必须唯一,值可以重复

字典里,“小明”只能有一个,不能有两个“小明”键。但他们的分数可以一样——比如“小明”和“小王”都考了 95 分,完全没问题。

常用操作顺手记

判断是否存在某个人:userScores.ContainsKey("小红")
删掉一个人:userScores.Remove("小刚")
遍历所有人和分数:

foreach (var kvp in userScores)
{
Console.WriteLine($"{kvp.Key}:{kvp.Value}");
}

输出就是:
小明:95
小红:87

小提醒:别用可变对象当键

如果你用自定义(比如 User)做键,记得重写 GetHashCode()Equals(),否则字典可能找不到你存进去的东西。初学者建议先用 stringintGuid 这类“老实本分”的类型当键,稳得很。

字典不是玄学,它就是帮你把“名字 ↔ 数据”这对关系管得明明白白的工具。下次再想“按名取值”,别急着写循环,先想想:我是不是该用个 Dictionary?