【问题标题】:a default value for a Dictionary in c# [duplicate]c#中字典的默认值[重复]
【发布时间】:2014-11-14 02:51:24
【问题描述】:

我有以下 PageViewModel 类:

public class PageViewModel : ViewModel<Page>
{
 public PageViewModel ()
        {
            Kywords = new List<Keyword>();
            AnswserKeywordDictionary = new Dictionary<string, Answer>();
        }
        public Company Company { get; set; }
        public List<Keyword> Kywords { get; set; }
        public Dictionary<string, Answer> AnswserKeywordDictionary { get; set; }
}

在我看来,我正在使用这样的属性 AnswserKeywordDictionary:

@Html.DisplayAffirmativeAnswer(Model.AnswserKeywordDictionary["myKey"])

我的问题是:如果“myKey”不在字典中,我如何返回默认值。

提前致谢

【问题讨论】:

  • 我不想每次都检查,我正在寻找类似当你使用 get 返回值时的东西

标签: c# asp.net-mvc dictionary


【解决方案1】:

检查是否存在,如果不存在,返回默认值:

Model.AnswserKeywordDictionary.ContainsKey("myKey")
    ? Model.AnswserKeywordDictionary["myKey"]
    : "default"

你也可以为此创建一个扩展方法:

    public static Dictionary<K, V> GetValueOrDefault<K, V>(this Dictionary<K, V> dictionary, K key, V defaultValue)
    {
        V val;
        if (dictionary.TryGetValue(key, out val))
        {
            return val ?? defaultValue;
        }

        return defaultValue;
    }

像这样使用它:

Model.AnswserKeywordDictionary.GetValueOrDefault("myKey", "default")

【讨论】:

    【解决方案2】:

    用方法抽象你的字典:

    public Dictionary<string, Answer> AnswserKeywordDictionary { get; set; }
    public GetAnswer(string key, Answer defaultValue)
    {
       if(AnswserKeywordDictionary.ContainsKey(key)
           return AnswserKeywordDictionary[key];
       return defaultValue;
    }
    

    然后在您的视图中使用该方法:

    @Html.DisplayAffirmativeAnswer(Model.GetAnswer("myKey"))
    

    【讨论】:

    • 感谢您的回复,但我不使用调用方法,我想要自动返回默认值的东西。比如进入属性
    • 链接问题中建议的添加扩展方法。
    猜你喜欢
    • 2021-07-27
    • 2016-06-25
    • 2017-01-27
    • 2017-09-06
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多