词典和DotLiquid

问题描述:

我有一个基本的.NET词典(词典)。在我的ToLiquid方法中,我确实序列化/公开Dictionary对象。我的问题是如何在液体模板中使用ITERATE键,就像在常规.NET中使用键一样?好像你必须知道实际的键才能访问液体模板中的值。词典和DotLiquid

我知道你可以在液体模板访问值喜欢这样

item.dictionary [“的myKey”]

但是我不知道实际的关键,所以我更愿意用DotLiquid中的“for”构造遍历键以获取各种值。由于“for”构造对集合起作用,Dictionary是一个集合,我认为这可以以某种方式完成,但是我尝试过的所有排列都失败了。

任何帮助将不胜感激。

+0

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

如果你只需要访问在字典中的值,你可以这样做:

[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)不支持。

只需为字典对象创建一个字段即可。然后用它来包装你滴的字典中的成员。 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(); 
    } 
}