如何添加一个Python样式的Get()方法,该方法将默认值赋予我的C#字典?

时间:2009-01-28 19:53:12

标签: c# dictionary default-value

如果在字典中找不到我指定的密钥,我希望能够指定一个默认值。

e.g。

int default = 5;
string key = "MyKey";
int foo = myDictionary.GetValue(key, default);

如果key myDictionary中的foo应该保留字典中的值,否则它将保留5

2 个答案:

答案 0 :(得分:3)

我找到了一段代码here,可以通过向IDictionary添加扩展方法来很好地完成工作:

using System.Collections.Generic;

namespace MyNamespace {
    public static class DictionaryExtensions {
        public static V GetValue<K, V>(this IDictionary<K, V> dict, K key) {
            return dict.GetValue(key, default(V));
        }

        public static V GetValue<K, V>(this IDictionary<K, V> dict, K key, V defaultValue) {
            V value;
            return dict.TryGetValue(key, out value) ? value : defaultValue;
        }
    }
}

答案 1 :(得分:0)

最好的方法是使用TryGetValue,一种可行的方法是:


    int default = 5;
    string key = "MyKey"; 
    int foo = 0;
    defaultValue = 5;
    (myDictionary.TryGetValue(key, out foo))?return foo: return defaultValue;

如果您尝试获取不存在的值,TryGetValue将返回false,这意味着您使用该子句的第二部分。

您也可以决定将foo设置为默认值,使用TryGetValue并在任何情况下返回foo。