以编程方式在C#中动态定义类中的属性

本文关键字:定义 属性 动态 方式 编程 | 更新日期: 2023-09-27 18:00:58

我正在尝试初始化C#程序中的对象,这样属性和值只有在运行时才知道。我使用的是一个nuget包,它需要已知类定义才能正常工作,我正试图以编程方式创建这个类。

根据我刚刚发现的这篇文章,使用ExpandoObject似乎是朝着正确方向迈出的一步,因为我们可以在运行时设置属性,但这些属性仍然是先验的,并硬编码到程序中。我希望能够实现的是拥有一个任意多个属性的列表["a"、"b"、"c"、"d"、"e"…],并能够将它们设置为新实例化对象中的属性,如下所示:

class Program
{
    static void Main(string[] args)
    {
        dynamic chano = new ExpandoObject();
        string test = "a";
        chano[test] = "Free the Carter, people need the Carter";
        Console.WriteLine(chano[test]); //want to console "Free the Carter...", of course this fails in compilation
        Console.ReadKey();
    }
}

然而,我们当然会遇到这样一个问题,即我们不能使用[]对对象进行索引。有没有类似的动态对象类型可以让我实现我想要的功能?

以编程方式在C#中动态定义类中的属性

评论中的真正问题似乎是"如何使用CsvHelper动态加载行"?动态支持是几年前在2.0版本中添加的。您可以通过传递dynamic作为类型来返回动态对象,即:

dynamic records=csv.GetRecords<dynamic>();