下面的代码在"emp.(col.ColummnName)"下给出了一个红色的边框.错误是" 预期的标识符 "
foreach (DataColumn col in dt.Columns)
{
emp.(col.ColumnName) = row[(col.ColumnName)];
}
Run Code Online (Sandbox Code Playgroud)
emp是一个自定义类,其属性名对应于dataTable dt中的列名.
我怀疑我必须以不同方式构造表达式,以便我可以使用方法调用的结果(col.ColumnName)引用类emp的属性.
任何想法将不胜感激.
==========================
最终答案与工作功能代码;
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
不支持此语法,必须在编译时知道属性名称.你可以改用反射:
foreach (DataColumn col in dt.Columns)
{
PropertyInfo prop = emp.GetType().GetProperty(col.ColumnName);
prop.SetValue(emp, row[col.ColumnName], null);
}
Run Code Online (Sandbox Code Playgroud)