在运行时从列表中创建对象及其属性

3
我需要在运行时创建动态对象及其属性,然后创建该对象的实例来存储值。
为什么我需要上述逻辑!
我正在使用C#读取Excel文件,代码的第一行是标题,它实际上是属性,每个行都是记录,是动态对象的实例。
 List<string> ExcelDataHeader = new List<string>();
         for (int y = 2; y <= colCount; y++)
           {
             ExcelDataHeader.Add(xlRange.Cells[headerRow, y].Value2.ToString());
           }

  dynamic MyDynamic = new System.Dynamic.ExpandoObject();
    ??????????

我需要将Excel读取的数据返回为对象。

1
通常情况下,您可以使用 MyDynamic.PropertyName = value 来设置属性。在您的情况下,value 可能来自工作表,因此它更像是 MyDynamic.PropertyName = ExcelDataHeader[3]。我不明白您的问题是什么。 - MakePeaceGreatAgain
可能是Dynamically Add C# Properties at Runtime的重复问题。 - Clint
1
为什么创建一个动态对象?把值存储在“字典”中就可以了。在我看来,这样会简单得多。 - DavidG
1个回答

2

在这里,您可以使用ExpandoObject - 它能够正常工作,但是您需要使用字典API:

IDictionary<string, object> obj = new ExpandoObject();
obj["id"] = 123;
obj["name"] = "Fred";

// this is the "dynamic" bit:
dynamic dyn = obj;
int id = dyn.id; // 123
string name = dyn.name; // "Fred"

然而,我并不明白其意义所在。由于你不会通过obj.PropertyName等方式在C#代码中引用对象,dynamic几乎没有任何用处。最好将每个记录存储在Dictionary<string,object>或类似的数据结构中。根据您的描述,没有任何情况下您需要将MyDynamic用作dynamic对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接