将未知(在设计时)属性添加到ExpandoObject

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (110)

只是探索c#4.试图让我的头脑围绕所有这些动态的东西。对不起,如果这个问题很愚蠢,没有经验在这个领域。

如果我有一个ExpandoObject并且希望在运行时向它添加公共属性(使用get和set),我该如何去做呢?

例如,我有一个documentTemplate和一个文档,它有一个指向documentTemplate的属性。这个文档模板有一些标签标题(例如在学生中开发的功能),这些标题在制作文档时应该加以说明(例如浓度,记忆等)。因此,只要在文档中设置了模板,我想要创建一个类,该模板具有与模板中标记标题相同名称的属性,然后使用某个UI元素(如PropertyGrid),我可以让用户根据标签标题填写标签值。

提问于
用户回答回答于

我想知道如何在“即时”添加成员到班级并提出这个示例:

using System;
using System.Collections.Generic;
using System.Dynamic;

class Program
{
    static void Main()
    {
        dynamic expando = new ExpandoObject();
        var p = expando as IDictionary<String, object>;

        p["A"] = "New val 1";
        p["B"] = "New val 2";

        Console.WriteLine(expando.A);
        Console.WriteLine(expando.B);
    }
}

该代码片断的要点是,成员A和B被定义为字符串文字(硬编码/字符串化),并通过ExpandoObject的IDictionary接口添加。我们通过直接访问它们并输出到控制台来测试密钥的存在和值(并验证概念)。

用户回答回答于

可以将委托属性添加到一个ExpandoObject,然后(几乎)就像方法一样。例如,

dynamic obj = new ExpandoObject();
obj.GetDocumentTemplate = () => { ... };
...
obj.GetDocumentTemplate(); // invokes delegate

所属标签

可能回答问题的人

  • gulu丶咕噜

    0 粉丝1 提问5 回答
  • 华讯云

    0 粉丝0 提问4 回答
  • EatRice

    16 粉丝0 提问4 回答
  • 发条丶魔灵1

    9 粉丝526 提问3 回答

扫码关注云+社区

领取腾讯云代金券