C# 怎么遍历一个 Dictionary_C# Dictionary 遍历方法详解

C# 怎么遍历一个 Dictionary_C# Dictionary 遍历方法详解
最新回答
枫林渡口初相遇

2026-10-30 15:49:06

在 C# 中,遍历 Dictionary<TKey, TValue> 是常见操作。Dictionary 存储键值对,遍历时有多种方式,可根据需求选择最合适的方法。

  1. 使用 foreach 遍历 KeyValuePair最常用的方式是使用 foreach 循环直接遍历字典,每次获取一个 KeyValuePair<TKey, TValue> 对象。这种方式简单直观,适合同时访问键和值。示例:
Dictionary<string, int> ages = new Dictionary<string, int>{ { "Alice", 25 }, { "Bob", 30 }, { "Charlie", 35 }};foreach (var kvp in ages){ Console.WriteLine($"Name: {kvp.Key}, Age: {kvp.Value}");}
  1. 分别遍历 Keys 或 Values 集合如果只需要键或只需要值,可以直接遍历 Keys 或 Values 属性。这样可以减少不必要的数据访问,提高可读性。遍历所有键:
foreach (var key in ages.Keys){ Console.WriteLine("Key: " + key);}

遍历所有值:

foreach (var value in ages.Values){ Console.WriteLine("Value: " + value);}
  1. 使用 GetEnumerator 手动遍历适用于需要更精细控制遍历过程的场景,比如在特定条件下跳出或继续。通过 GetEnumerator() 获取枚举器,手动调用 MoveNext() 和访问 Current。示例:
var enumerator = ages.GetEnumerator();while (enumerator.MoveNext()){ var current = enumerator.Current; Console.WriteLine($"Key: {current.Key}, Value: {current.Value}");}

注意:通常推荐使用 foreach,除非有特殊控制需求。

  1. 在遍历时安全地修改字典不能在 foreach 遍历过程中直接添加或删除元素,否则会抛出 InvalidOperationException。如果需要删除满足条件的项,应先收集键,再单独操作:
var keysToRemove = ages.Where(kvp => kvp.Value < 30) .Select(kvp => kvp.Key) .ToList();foreach (var key in keysToRemove){ ages.Remove(key);}

或者使用 for 循环反向遍历(不适用于 Dictionary,因其无序),所以推荐先缓存键列表。基本上就这些。根据实际需要选择遍历方式,日常开发中 foreach(var kvp in dict) 最实用也最清晰。