C# 如何创建数据类型未知的新数据行字段?
问题标题措词不当,以下是一些背景: 我正在使用反射在C# 如何创建数据类型未知的新数据行字段?,c#,asp.net,.net,reflection,C#,Asp.net,.net,Reflection,问题标题措词不当,以下是一些背景: 我正在使用反射在数据表中创建一个数据行,该表中的字段具有另一个对象的属性名称、值和类型,尽管我不知道如何正确设置类型,但以下内容并没有让intellisense满意: Application app = Get(id, context); // Method args provide these DataTable dt = new DataTable(); DataRow dr = dt.NewRow(); foreach (PropertyInfo p
数据表
中创建一个数据行
,该表中的字段具有另一个对象的属性名称、值和类型,尽管我不知道如何正确设置类型,但以下内容并没有让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;
Application-app=Get(id,context);//方法参数提供了这些
DataTable dt=新的DataTable();
DataRow dr=dt.NewRow();
foreach(app.GetType().GetProperties()中的PropertyInfo p)
{
dr.SetField(p.Name,p.GetValue(p,null));//尝试1
dr.SetField(p.Name,p.GetValue(p,null));//尝试2
dr.SetField(p.Name,p.GetValue(p,null));//尝试3
}
返回dt;
使用反射时要记住的一件事是,一旦开始使用它,就必须一直使用反射
不能指定这样的泛型参数。必须提供类型名称。如果您不知道类型名称,那么您需要使用Reflection
获取方法,并通过提供DataRow
实例和值来调用它的Invoke
方法
作为提示,一旦您从DataRowExtensions
获得SetField
method,您可以使用method通过提供一个类型实例(在本例中是p.PropertyType
)来构造一个泛型方法。没有注释来伴随否决票?我没有否决你,但是查看有关泛型的文档是明智的。和反射,因为您可能最终需要动态调用dr.SetField
。