【问题标题】:Dynamically populating an object in C#在 C# 中动态填充对象
【发布时间】:2016-12-06 06:18:46
【问题描述】:

我有一个带有单元格的 excel 表。我想在运行时读取和填充一个对象。 这是我尝试过的。

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();
    }
}

但这里的问题是dtoCommonTag.columnName 对于来自dsRow[dc].ToString() 的所有列都是恒定的。

如何动态更改Commonkey值?

【问题讨论】:

    标签: c# .net excel c#-4.0


    【解决方案1】:

    这里有两个选项:

    你试过了吗

    Common[columnName] = dsRow[dc].ToString();
    

    最坏的情况,您可以编写一个 switch 语句来影响每一列。它不会很漂亮,但它会起作用。

    【讨论】:

    • 第二个选项是什么?
    • @ThorstenDittmar 就在答案中:“写一个 switch 语句来影响每一列”。
    【解决方案2】:

    dynamic 对象不是这样工作的。您可以为动态对象动态添加属性,但不能“按字符串”。

    但是,您可以使用 ExpandoObject 来执行此操作:

    var x = new ExpandoObject() as IDictionary<string, Object>;
    x.Add(columnName, dsRow[dc].ToString());
    
    dynamic dyn = x;
    

    然后你可以使用列名作为属性。

    【讨论】:

      【解决方案3】:

      使用“反射”。 然后您可以将属性名称作为字符串值传递,然后将值传递给该属性。 Try this

      FieldInfo info = typeof(Common).GetField(dc.ColumnName);
      info.SetValue(null, dsRow[dc].ToString())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多