如何编写一个采用数据行并填充对象属性的泛型函数?

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