Ila*_*lan 4 .net c# data-binding reflection
我有一些功能
private static UserInfo FillUserInfoFromDataRow(DataRow dr)
{
UserInfo user = new UserInfo();
user.UserID = (int) dr["UserID"];
user.UserName = (int) dr["UserName"];
user.ProjectID = (int) dr["ProjectID"];
user.ClassID = (int) dr["ClassID"];
..............
return user;
}
Run Code Online (Sandbox Code Playgroud)
我想编写一些通用函数,如私有静态T FillEntityInfoFromDataRow(DataRow dr),它将处理类似的类型ProjectInfo,JobInfo等.
我可以获取DataRow参数的所有列名称,但我不知道如何获取通用T类型的所有相应字段以及如何进行适当的转换.这是完成这项工作的方法吗?谢谢!
宜兰.
Pra*_*ana 10
它更好地利用反射,没有一个例子可以在谷歌这样做这个.
请查看以下示例
namespace MyNamespace.Data
{
class Converter
{
public static void Fill(object LogicObject, DataRow Row)
{
Dictionary<string, PropertyInfo> props = new Dictionary<string,PropertyInfo>();
foreach (PropertyInfo p in LogicObject.GetType().GetProperties())
props.Add(p.Name, p);
foreach (DataColumn col in Row.Table.Columns)
{
string name = col.ColumnName;
if (Row[name] != DBNull.Value && props.ContainsKey(name))
{
object item = Row[name];
PropertyInfo p = props[name];
if (p.PropertyType != col.DataType)
item = Convert.ChangeType(item, p.PropertyType);
p.SetValue(LogicObject, item, null);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
查看完整的博客文章:http://kasey-jo.blogspot.com/2009/04/using-reflection-to-fill-business-layer.html