C#:TryGetValue
在C#中,TryGetValue
是Dictionary<TKey, TValue>
类提供的一个高效方法,用于安全地获取字典中的值。该方法结合了键存在性检查和值获取两个操作,避免了传统ContainsKey
+索引访问导致的两次查找开销。
主要特点:
- 方法签名:
bool TryGetValue(TKey key, out TValue value)
,返回布尔值表示键是否存在,通过out
参数返回对应的值 - 性能优势:相比先调用
ContainsKey
再通过索引取值,TryGetValue
只需一次哈希查找,效率更高 - 安全访问:当键不存在时不会抛出异常,而是返回
false
并将value
设为默认值
典型使用场景:
Dictionary<string, int> ages = new() { {"Alice", 25}, {"Bob", 30} };
// 传统方式(不推荐)
if(ages.ContainsKey("Alice")) {
int age = ages["Alice"]; // 二次查找
}
// 推荐方式
if(ages.TryGetValue("Bob", out int bobAge)) {
Console.WriteLine($"Bob's age: {bobAge}"); // 输出:Bob's age: 30
} else {
Console.WriteLine("Key not found");
}
注意事项:
- 对于值类型,未找到键时
out
参数会返回该类型的默认值(如int返回0) - 可配合C# 7.0的
out var
语法简化代码 - 线程不安全场景需自行加锁
微软官方文档建议优先使用此方法替代ContainsKey
+索引访问的模式。该方法也适用于其他实现IDictionary<TKey,TValue>
接口的集合类。