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

vir*_*mic 48 c# c#-4.0

只是探索c#4.试着让我了解所有这些动态的东西.对不起,如果这个问题很愚蠢,没有这个领域的经验.

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

例如,我有一个documentTemplate和一个文档,它有一个指向documentTemplate的属性.本文档模板有一些标签标题(例如,学生之间开发的功能),应该在制作文档时解决(例如,集中,记忆等).因此,只要在文档中设置模板,我想创建一个类,其具有与模板中的标签标题相同的属性,然后使用一些UI元素,例如PropertyGrid,我可以拥有该用户为标签标题填写标签值.

谢谢阅读!

Pau*_*sik 95

我想知道如何可以"动态"将成员添加到类中并提出以下示例:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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