c# myclass.[(col.ColumnName)] = row[(col.ColumnName)]表示期望的标识

本文关键字:ColumnName col 期望 标识 表示 myclass row | 更新日期: 2023-09-27 18:14:41

下面的代码在"emp.(col.ColummnName)"下面显示了一个红色曲线。错误是"标识符预期"

foreach (DataColumn col in dt.Columns)
{
   emp.(col.ColumnName) = row[(col.ColumnName)];
}

emp是一个自定义类,其属性名对应于dataTable dt中的列名。

我怀疑我必须以不同的方式构造表达式,以便我可以引用类emp的属性,并使用方法调用(col.ColumnName)的结果。

如有任何意见,我将不胜感激。

==========================

带工作函数代码的最终答案;

public void rowToObject(ref DataRow dr, ref object myObj)
{
    foreach (DataColumn dc in dr.Table.Columns)
    {
        string colName = dc.ColumnName;
        object colValue = dr[colName];
        if (object.ReferenceEquals(colValue, DBNull.Value))
        {
            colValue = null;
        }
        PropertyInfo pi = myObj.GetType().GetProperty(colName);
        if (pi != null && colValue != null)
        {
            Type propType = null;
            Type nullableType = Nullable.GetUnderlyingType(pi.PropertyType);
            if (nullableType != null)
            {
                propType = nullableType;
            }
            else
            {
                propType = pi.PropertyType;
            }
            if (object.ReferenceEquals(propType, colValue.GetType()))
            {
                pi.SetValue(myObj, colValue, null);
            }
        }
    }
}

c# myclass.[(col.ColumnName)] = row[(col.ColumnName)]表示期望的标识

不支持此语法,必须在编译时知道属性名称。您可以使用反射:

foreach (DataColumn col in dt.Columns)
{
   PropertyInfo prop = emp.GetType().GetProperty(col.ColumnName);
   prop.SetValue(emp, row[col.ColumnName], null);
}

这种对类属性的动态访问确实是有益的,但它并不像您希望的那样容易实现。

你需要看看Reflection…有了这个库,你可以动态地创建和填充你的类,但这需要一些阅读和尝试/错误。

这里有几个链接,讨论你的情况;然而,你可能想先看看反射101教程。:

  • http://www.codeproject.com/KB/cs/fast_dynamic_properties.aspx
  • c#属性可以访问目标类吗?

.

.

如果有帮助请投票

我不知道你可以用你想要的方式来做。你正在寻找的是反射,你可以在这篇文章中找到一个如何工作的例子:

如何遍历类的所有属性?