词典和DotLiquid
问题描述:
我有一个基本的.NET词典(词典)。在我的ToLiquid方法中,我确实序列化/公开Dictionary对象。我的问题是如何在液体模板中使用ITERATE键,就像在常规.NET中使用键一样?好像你必须知道实际的键才能访问液体模板中的值。词典和DotLiquid
我知道你可以在液体模板访问值喜欢这样
item.dictionary [“的myKey”]
但是我不知道实际的关键,所以我更愿意用DotLiquid中的“for”构造遍历键以获取各种值。由于“for”构造对集合起作用,Dictionary是一个集合,我认为这可以以某种方式完成,但是我尝试过的所有排列都失败了。
任何帮助将不胜感激。
答
如果你只需要访问在字典中的值,你可以这样做:
[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();
}
}
'Dictionary'有一个属性返回键上的迭代器:'Keys'。 – vulkanino 2012-02-29 17:13:46