如果键不存在,则字典返回默认值

我发现自己如今在我的代码中经常使用当前模式

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

回到顶部