一尘不染

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

c#

只是探索c#4。试图让我了解所有这些动态的东西。抱歉,这个问题很傻,没有这个领域的经验。

如果我有一个ExpandoObject并想在运行时为其添加公共属性(带有get和set),我将如何做呢?

例如,我有一个documentTemplate和一个文档,该文档具有指向documentTemplate的属性。该documentTemplate具有一些标签Titles(例如,学生之间发展的能力),在制作文档时应解决这些问题(例如,浓度,记忆力等)。因此,一旦在文档中设置了模板,我就想创建一个类,该类具有与Template中的标签标题同名的属性,然后使用一些UI元素(例如PropertyGrid),使用户根据标签标题填写标签值。

谢谢阅读!


阅读 423

收藏
2020-05-19

共1个答案

一尘不染

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

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接口添加。我们通过直接访问键并输出到控制台来测试键的存在和值(并证明其概念)。

2020-05-19