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

Programmatically define properties in classes dynamically in C#

我正在尝试以某种方式初始化 C# 程序中的对象,使得属性和值仅在 运行 时间已知。我正在使用一个 nuget 包,它需要知道 class 定义才能正常运行,我正在尝试以编程方式创建这个 class.

基于 this post I just found,使用 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();
    }
}

但是,我们当然 运行 遇到了我们无法使用 [] 索引对象的问题。是否有任何类似的动态对象类型可以让我实现我正在寻找的功能?

评论中真正的问题似乎是"How can I load rows dynamicallly using CsvHelper"?动态支持是在几年前的 2.0 版本中添加的。您可以通过传递 dynamic 作为类型来 return 动态对象,即:

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