问题标题措辞不佳,所以这里有一些背景知识:
我使用反射在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;
答案 0 :(得分:3)
使用Reflection
时要记住的一件事是,一旦开始使用它,就必须使用Reflection
一直走。
您无法像这样指定泛型参数。您必须提供类型名称。如果您不知道类型名称,则需要使用Reflection
方法获取SetField
方法,并通过提供Invoke
实例和值来调用它DataRow
方法。
作为提示,一旦从SetField
获得DataRowExtensions
方法,您可以使用MakeGenericMethod
方法通过提供类型实例(p.PropertyType
来构建泛型方法案例)