当前位置:  开发笔记 > 编程语言 > 正文

C#词典ValueOrNull/ValueorDefault

如何解决《C#词典ValueOrNull/ValueorDefault》经验,为你挑选了3个好方法。

目前我正在使用

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

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

var x =  dict[key] ?? defaultValue;

这也是linq查询等的一部分,所以我更喜欢单行解决方案.



1> Brian..:

使用扩展方法:

public static class MyHelper
{
    public static V GetValueOrDefault(this IDictionary 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();
        dict.GetValueOrDefault(42, "default");
    }
}


我提供一个返回默认值的重载(V)
在C#4中,您现在可以将默认参数设置为可选:V defaultVal = default(V).然后,如果您不想传入默认值,则不必传入默认值 - 如果未找到该值,您将获得类型V的默认值.

2> TcKs..:

您可以使用辅助方法:

public abstract class MyHelper {
    public static V GetValueOrDefault( Dictionary 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 );


你实际上可以使这个无条件 - 只需在调用TryGetValue后返回ret.如果方法返回false,它将默认为(V).

3> Mike Chamber..:

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

public static TV GetValueOrDefault(this IDictionary dic, TK key,
    TV defaultVal=default(TV))
{
    TV val;
    return dic.TryGetValue(key, out val) 
        ? val 
        : defaultVal;
}

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有