2012-02-29 7 views
0

私は基本的な.NET辞書(辞書)を持っています。私のToLiquidメソッドでは、実際にはDictionaryオブジェクトをシリアル化/公開します。私の質問は、あなたが通常の.NETで行うのと同じように、液体テンプレートのキーをどのようにIT化できるのでしょうか?液体テンプレートの値にアクセスするには、実際のキーを知っている必要があります。辞書とドット言語

私はあなたがそのような

item.dictionaryを[「MYKEY」]のような液体テンプレート内の値にアクセスすることができることを理解し、私は実際のキーを知らないので、私は使用することを好むしかし

さまざまな値を取得するために、DotLiquidの "for"コンストラクトをキーに対して反復処理します。 "for"コンストラクトはコレクションで動作し、Dictionaryはコレクションであると私は考えていましたが、私が試したすべてのパーミュテーションは失敗しました。

ご協力いただければ幸いです。

+0

'Dictionary'には、キーのイテレータを返すためのプロパティがあります:' Keys'。 – vulkanino

答えて

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(); 
    } 
} 
関連する問題