代码之家  ›  专栏  ›  技术社区  ›  Redwood

如何添加一个python-style get()方法,该方法将默认值带到我的C字典中?

  •  0
  • Redwood  · 技术社区  · 16 年前

    如果在字典中找不到我指定的键,我希望能够指定要返回的默认值。

    例如

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

    如果 key 是在 myDictionary foo 应该保存字典中的值,否则它将保存 5 .

    2 回复  |  直到 16 年前
        1
  •  3
  •   Redwood    16 年前

    我找到了一个密码 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;
            }
        }
    }
    
        2
  •  0
  •   mandel    16 年前

    最好的方法是使用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。