Dictionary ContainsKey并在一个函数中获取值
本文关键字:函数 一个 获取 ContainsKey Dictionary | 更新日期: 2023-09-27 18:20:21
有没有一种方法可以调用Dictionary<string, int>
一次来查找键的值?现在我正在打两个类似的电话。
if(_dictionary.ContainsKey("key") {
int _value = _dictionary["key"];
}
我想这样做:
object _value = _dictionary["key"]
//but this one is throwing exception if there is no such key
如果没有这样的键,我会想要null,或者通过一次调用获取值?
您可以使用TryGetValue
int value;
bool exists = _dictionary.TryGetValue("key", out value);
如果TryGetValue
包含指定的密钥,则返回true,否则返回false。
所选答案正确。这是为了向用户2535489提供正确的方法来实现他的想法:
public static class DictionaryExtensions
{
public static TValue GetValue<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue fallback = default(TValue))
{
TValue result;
return dictionary.TryGetValue(key, out result) ? result : fallback;
}
}
然后可以与一起使用
Dictionary<string, int> aDictionary;
// Imagine this is not empty
var value = aDictionary.GetValue("TheKey"); // Returns 0 if the key isn't present
var valueFallback = aDictionary.GetValue("TheKey", 10); // Returns 10 if the key isn't present
出于您的目的,这可能应该做到。就像你在问题中问的那样,一次性将所有内容,null或值,放入一个对象:
object obj = _dictionary.ContainsKey("key") ? _dictionary["key"] as object : null;
或。。
int? result = _dictionary.ContainsKey("key") ? _dictionary["key"] : (int?)null;
我想,你可以这样做(或者写一个更清晰的扩展方法)。
object _value = _dictionary.ContainsKey(myString) ? _dictionary[myString] : (int?)null;
不过,我不确定我是否会特别乐意使用它,通过将null和"Found"条件相结合,我会认为你只是将问题转移到了稍微靠后的null检查上。