遍历C# Dictionary有多种方式,最常用的是使用foreach直接遍历KeyValuePair,适合同时访问键和值;若只需键或值,可分别遍历Keys或Values集合以提升效率;需要精细控制时可用GetEnumerator手动遍历;遍历时不可直接修改字典,否则会抛出异常,应先缓存需删除的键再操作。

在 C# 中,遍历 Dictionary
1. 使用 foreach 遍历 KeyValuePair
最常用的方式是使用 foreach 循环直接遍历字典,每次获取一个 KeyValuePair这种方式简单直观,适合同时访问键和值。
示例:Dictionaryages = new Dictionary
{
{ "Alice", 25 },
{ "Bob", 30 },
{ "Charlie", 35 }
};
foreach (var kvp in ages)
{
Console.WriteLine($"Name: {kvp.Key}, Age: {kvp.Value}");
}
2. 分别遍历 Keys 或 Values 集合
如果只需要键或只需要值,可以直接遍历 Keys 或 Values 属性。这样可以减少不必要的数据访问,提高可读性。
- 遍历所有键:
foreach (var key in ages.Keys)
{
Console.WriteLine("Key: " + key);
}
- 遍历所有值:
foreach (var value in ages.Values)
{
Console.WriteLine("Value: " + value);
}
3. 使用 GetEnumerator 手动遍历
适用于需要更精细控制遍历过程的场景,比如在特定条件下跳出或继续。通过 GetEnumerator() 获取枚举器,手动调用 MoveNext() 和访问 Current。
示例:
var enumerator = ages.GetEnumerator();注意:通常推荐使用 foreach,除非有特殊控制需求。
while (enumerator.MoveNext())
{
var current = enumerator.Current;
Console.WriteLine($"Key: {current.Key}, Value: {current.Value}");
}
4. 在遍历时安全地修改字典
不能在 foreach 遍历过程中直接添加或删除元素,否则会抛出 InvalidOperationException。如果需要删除满足条件的项,应先收集键,再单独操作:
var keysToRemove = ages.Where(kvp => kvp.Value < 30)或者使用 for 循环反向遍历(不适用于 Dictionary,因其无序),所以推荐先缓存键列表。
.Select(kvp => kvp.Key)
.ToList();
foreach (var key in keysToRemove)
{
ages.Remove(key);
}
基本上就这些。根据实际需要选择遍历方式,日常开发中 foreach(var kvp in dict) 最实用也最清晰。










