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$ 但我需要它们在结构内。所以我实际上需要说服字符串模板 setAttribute 我正在传递一个具有属性 elem1 和 elem2 的对象,而实际上我有一个 KeyValuePairs 列表。

谢谢

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"));
}

我自己和一位同事正在寻找复制 STST(ST 独立工具)的功能,它使用 json 作为属性,我们构建了一个简单的 JObject 到字典转换器,我可以发布该代码和一个示例,如果它对你有任何用处,只有约 20 行。

于 2010-04-16T17:32:07.193 回答
0

ExpandoObject的成员可以在运行时动态添加和删除。

于 2011-01-16T09:50:24.503 回答