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

时间:2016-08-05 15:22:50

标签: c# .net class object expandoobject

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

基于this post I just found,看起来使用ExpandoObject是朝着正确方向迈出的一步,因为我们可以在运行时设置属性,但是这些属性仍然是先验已知并且硬编码到程序中。我希望能够实现的是拥有任意多个属性的列表[" a"," b"," c"," d&# 34;," 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();
    }
}

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

1 个答案:

答案 0 :(得分:2)

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

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