15

目前我正在使用

var x = dict.ContainsKey(key) ? dict[key] : defaultValue

我想要一些方法让字典 [key] 为不存在的键返回 null,所以我可以写类似的东西

var x =  dict[key] ?? defaultValue;

这也最终成为 linq 查询等的一部分,所以我更喜欢单线解决方案。

4

4 回答 4

21

使用扩展方法:

public static class MyHelper
{
    public static V GetValueOrDefault<K, V>(this IDictionary<K, V> dic, 
                                            K key, 
                                            V defaultVal = default(V))
    {
        V ret;
        bool found = dic.TryGetValue(key, out ret);
        if (found) { return ret; }
        return defaultVal;
    }
    void Example()
    {
        var dict = new Dictionary<int, string>();
        dict.GetValueOrDefault(42, "default");
    }
}
于 2008-10-31T17:02:01.147 回答
6

您可以使用辅助方法:

public abstract class MyHelper {
    public static V GetValueOrDefault<K,V>( Dictionary<K,V> dic, K key ) {
        V ret;
        bool found = dic.TryGetValue( key, out ret );
        if ( found ) { return ret; }
        return default(V);
    }
}

var x = MyHelper.GetValueOrDefault( dic, key );
于 2008-10-31T16:51:24.943 回答
5

这是“终极”的解决方案,它被实现为扩展方法,使用 IDictionary 接口,提供可选的默认值,并且编写简洁。

public static TV GetValueOrDefault<TK, TV>(this IDictionary<TK, TV> dic, TK key,
    TV defaultVal=default(TV))
{
    TV val;
    return dic.TryGetValue(key, out val) 
        ? val 
        : defaultVal;
}
于 2012-09-28T01:52:53.817 回答
0

不只是TryGetValue(key, out value)您正在寻找的东西吗?引用 MSDN:

When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. This parameter is passed uninitialized.

来自http://msdn.microsoft.com/en-us/library/bb347013(v=vs.90).aspx

于 2012-05-24T23:05:42.087 回答