2014-09-19 250 views
0

我有以下PageViewModel类:在C#中的字典中的默认值

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”不在字典中,我可以返回默认值吗?

在此先感谢

+0

我不想ceck每一次,我在找的东西,当你使用get返回喜欢值 – 2014-09-19 13:36:00

回答

2

检查它是否存在,如果没有,返回默认值:

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") 
0

与抽象的方法你的字典:

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")) 
+0

谢谢,为了响应,但我不使用调用方法,我想要的东西,自动返回默认值。如获取属性 – 2014-09-19 13:34:27

+0

添加链接问题中建议的扩展方法。 – 2014-09-19 13:39:14