0

文字列テンプレートを使用して一部のコンテンツをレンダリングしていますが、コンテンツが可変である可能性があるため、渡す方法がわかりません (.net / c# を使用)

基本的な考え方は、パラメータとして終了する必要がある List> があることです。

List<KeyValuePair<string, object>> ret = new List<KeyValuePair<string, object>>();
ret.Add(new KeyValuePair<string, object>("elem1", true));
ret.Add(new KeyValuePair(string, object>("elem2", false));

これらを文字列テンプレートに次のように表示します。

$item.elem1$ $item.elem2$

それらを $elem1$ または $elem2$ にすることはできますが、構造内にそれらが必要です。したがって、実際には KeyValuePairs のリストを持っているのに、プロパティ elem1 と elem2 を持つオブジェクトを渡すことを文字列テンプレート setAttribute に納得させる必要があります。

ありがとう

4

2 に答える 2

4

実際には、その非常に小さな書き直しが機能するはずです。辞書を使用する必要があり、それらをネストすることもできます (ST 3.2 を使用):

[Test]
public void When_Building_Text_With_A_Dictionary_As_The_Attributes_It_Should_Map_Members_To_Keys()
{
    IDictionary<string, object> ret = new Dictionary<string, object>();
    ret["elem1"] = true;
    ret["elem2"] = false;

    var nestedObj = new Dictionary<string, object>();
    nestedObj["nestedProp"] = 100;
    ret["elem3"] = nestedObj;

    var template = new StringTemplate("$elem1$ or $elem2$ and value: $elem3.nestedProp$");
    template.Attributes = ret;

    StringBuilder sb = new StringBuilder();
    StringWriter writer = new StringWriter(sb);
    template.Write(new NoIndentWriter(writer));
    writer.Flush();

    var renderedText = sb.ToString();

    Assert.That(renderedText, Is.EqualTo("True or False and value: 100"));
}

私自身と同僚は、json をプロパティとして使用する STST (ST Standalone Tool) の機能を複製しようとしていました。単純な JObject から辞書へのコンバーターを作成しました。そのコードと例が役に立ったら投稿できます。 、それはたったの〜20行です。

于 2010-04-16T17:32:07.193 に答える
0

ExpandoObjectのメンバーは、実行時に動的に追加および削除できます。

于 2011-01-16T09:50:24.503 に答える