Словари и DotLiquid
У меня есть базовый словарь.NET (словарь). В моем методе ToLiquid я действительно сериализую / выставляю объект Dictionary. Мой вопрос заключается в том, как я могу СОДЕРЖАТЬ ключи в жидком шаблоне, как вы это делаете в обычном.NET? Кажется, что вы ДОЛЖНЫ знать фактический ключ, чтобы получить доступ к значению в жидком шаблоне.
Я понимаю, что вы можете получить доступ к значению в жидком шаблоне, как такой
item.dictionary["MYKEY"]
Однако я не знаю фактический ключ, поэтому я бы предпочел использовать конструкцию "for" в DotLiquid для перебора ключей для получения различных значений. Поскольку конструкция "for" работает с коллекциями, а Dictionary - это коллекция, я подумал, что это можно как-то сделать, но все попытки, которые я пробовал, потерпели неудачу.
Любая помощь будет принята с благодарностью.
2 ответа
Если вам нужен только доступ к значениям в словаре, вы можете сделать это:
[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
цикл, то это не поддерживается текущей версией (1.6.1) DotLiquid.
Просто создайте каплю для объекта словаря. Тогда используйте это, чтобы обернуть своих участников, которые являются словарями в Ваших каплях. 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();
}
}