如何创建具有未知数据类型的新数据行字段?

时间:2015-01-21 17:18:01

标签: c# asp.net .net reflection

问题标题措辞不佳,所以这里有一些背景知识:

我使用反射在DataRow内创建一个DataTable,其中包含具有另一个对象的属性名称,值和类型的字段,尽管我不知道如何正确设置类型,以下没有高兴的intellisense:

Application app = Get(id, context); // Method args provide these

DataTable dt = new DataTable();
DataRow dr = dt.NewRow();

foreach (PropertyInfo p in app.GetType().GetProperties())
{
    dr.SetField<p.PropertyType>(p.Name, p.GetValue(p, null)); // attempt 1
    dr.SetField<typeof(p.GetType())>(p.Name, p.GetValue(p, null)); // attempt 2
    dr.SetField<p.GetType()>(p.Name, p.GetValue(p, null)); // attempt 3
}

return dt;

1 个答案:

答案 0 :(得分:3)

使用Reflection时要记住的一件事是,一旦开始使用它,就必须使用Reflection一直走。

您无法像这样指定泛型参数。您必须提供类型名称。如果您不知道类型名称,则需要使用Reflection方法获取SetField方法,并通过提供Invoke实例和值来调用它DataRow方法。

作为提示,一旦从SetField获得DataRowExtensions方法,您可以使用MakeGenericMethod方法通过提供类型实例(p.PropertyType来构建泛型方法案例)