[英]Dynamically populating an object in C#
I have an excel sheet with cells . 我有一个带有单元格的Excel工作表。 I want to read and populate an object at runtime.
我想在运行时读取并填充对象。 This is what I tried.
这就是我尝试过的。
dynamic Common = new JObject();
foreach (DataRow dsRow in dtTable.Rows)
{
// On all tables' columns
foreach(DataColumn dc in dtTable.Columns)
{
var columnName = dc.ColumnName;
Common.columnName = dsRow[dc].ToString();
}
}
But the problem here is dtoCommonTag.columnName
is constant for all the columns from dsRow[dc].ToString()
. 但是这里的问题是
dtoCommonTag.columnName
对于dsRow[dc].ToString()
所有列都是常量。
How do I dynamically change the key values of Common ? 如何动态更改Common的键值 ?
Two options here: 这里有两个选择:
Have you tried 你有没有尝试过
Common[columnName] = dsRow[dc].ToString();
Worst case scenario, you can write a switch statement to affect every column. 最坏的情况是,您可以编写一个switch语句来影响每一列。 It won't be pretty but it will work.
它不会很漂亮,但是会起作用。
That is not how dynamic
objects work. 这不是
dynamic
对象的工作方式。 You can dynamically add properties to a dynamic object, but not "by string". 您可以向动态对象动态添加属性,但不能“按字符串”添加属性。
You can, however, use an ExpandoObject
to do that: 但是,您可以使用
ExpandoObject
来做到这一点:
var x = new ExpandoObject() as IDictionary<string, Object>;
x.Add(columnName, dsRow[dc].ToString());
dynamic dyn = x;
Then you can use the column names as properties. 然后,您可以将列名称用作属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.