如果键不存在,则字典返回默认值
我发现自己如今在我的代码中经常使用当前模式
var dictionary = new Dictionary<type, IList<othertype>>();// Add stuff to dictionary
var somethingElse = dictionary.ContainsKey(key) ? dictionary[key] : new List<othertype>();
// Do work with the somethingelse variable
有时
var dictionary = new Dictionary<type, IList<othertype>>();// Add stuff to dictionary
IList<othertype> somethingElse;
if(!dictionary.TryGetValue(key, out somethingElse) {
somethingElse = new List<othertype>();
}
这两种方式都感觉很round回。我真正想要的是
dictionary.GetValueOrDefault(key)
现在,我可以为字典类编写一个扩展方法,该方法可以为我完成此任务,但我发现可能会丢失一些已经存在的东西。因此,有没有一种方法可以更轻松地执行此操作,而无需编写字典的扩展方法?
回答:
TryGetValue
已经为字典指定了类型的默认值,因此您可以使用:
dictionary.TryGetValue(key, out value);
并忽略返回值。然而,真正 将
刚刚返回default(TValue)
,而不是一些自定义的默认值(也没有,更有效,执行委托的结果)。框架中没有比它更强大的功能了。我建议两种扩展方法:
public static TValue GetValueOrDefault<TKey, TValue> (this IDictionary<TKey, TValue> dictionary,
TKey key,
TValue defaultValue)
{
TValue value;
return dictionary.TryGetValue(key, out value) ? value : defaultValue;
}
public static TValue GetValueOrDefault<TKey, TValue>
(this IDictionary<TKey, TValue> dictionary,
TKey key,
Func<TValue> defaultValueProvider)
{
TValue value;
return dictionary.TryGetValue(key, out value) ? value
: defaultValueProvider();
}
(当然,您可能需要检查参数:)
以上是 如果键不存在,则字典返回默认值 的全部内容, 来源链接: utcz.com/qa/401493.html