2012-02-29 59 views
0

我有一個基本的.NET詞典(詞典)。在我的ToLiquid方法中,我確實序列化/公開Dictionary對象。我的問題是如何在液體模板中使用ITERATE鍵,就像在常規.NET中使用鍵一樣?好像你必須知道實際的鍵才能訪問液體模板中的值。詞典和DotLiquid

我知道你可以在液體模板訪問值喜歡這樣

item.dictionary [「的myKey」]

但是我不知道實際的關鍵,所以我更願意用DotLiquid中的「for」構造遍歷鍵以獲取各種值。由於「for」構造對集合起作用,Dictionary是一個集合,我認爲這可以以某種方式完成,但是我嘗試過的所有排列都失敗了。

任何幫助將不勝感激。

+0

'Dictionary'有一個屬性返回鍵上的迭代器:'Keys'。 – vulkanino 2012-02-29 17:13:46

回答

1

如果你只需要訪問在字典中的值,你可以這樣做:

[Test] 
public void TestForWithDictionary() 
{ 
    var dictionary = new Dictionary<string, string> 
    { 
     { "Graham Greene", "English" }, 
     { "F. Scott Fitzgerald", "American" } 
    }; 
    Helper.AssertTemplateResult(" English American ", "{% for item in authors %} {{ item }} {% endfor %}", 
     Hash.FromAnonymousObject(new { authors = dictionary.Values })); 
} 

不過,如果你確實需要訪問鍵和值的for循環中,那麼這DotLiquid的當前版本(1.6.1)不支持。

0

只需爲字典對象創建一個字段即可。然後用它來包裝你滴的字典中的成員。 IE:

public class MyDictionaryDrop : Drop 
{ 
    private Dictionary<string,string> _myDictionary; 
    public DictionaryDrop<string, string> MyDictionary 
    { 
     get 
     { 
      return new DictionaryDrop<string, string>(_myDictionary); 
     } 
    } 
} 

public class DictionaryDrop<TKey,TValue> : Drop ,IEnumerable 
{ 
    private readonly Dictionary<TKey, TValue> _dictionary; 
    public DictionaryDrop(Dictionary<TKey,TValue> dictionary) 
    { 
     _dictionary = dictionary; 
    } 

    public ICollection<TKey> Keys { get { return _dictionary.Keys; } } 
    public ICollection<TValue> Values { get { return _dictionary.Values; } } 
    public TValue this[TKey key] { get { return _dictionary[key]; } } 

    public IEnumerator GetEnumerator() 
    { 
     return _dictionary.GetEnumerator(); 
    } 
}