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