C#中属性PropertyInfo的使用
作者:网络转载 发布时间:[ 2014/12/3 13:54:38 ] 推荐标签:C# 软件开发 NET
转换方法:
public static User ConvertObject(User user,Person person)
{
PropertyInfo[] userPro = user.GetType().GetProperties();
PropertyInfo[] personPro = person.GetType().GetProperties();
if (userPro.Length>0&&personPro.Length>0)
{
for (int i = 0; i < userPro.Length; i++)
{
for (int j = 0; j < personPro.Length; j++)
{<br> //判断User的属性是不是的Person中
if (userPro[i].Name == personPro[j].Name && userPro[i].PropertyType == personPro[j].PropertyType)
{
Object value=personPro[j].GetValue(person, null);
//将Person中属性的值赋值给User<br> userPro[i].SetValue(user,value , null);
}
}
}
}
return user;
}
方法的调用:
static void Main(string[] args)
{
Person person = new Person(1,"FlyElephant","北京");
User user = new User();
user.Id = 20;
user = ConvertObject(user, person);
Console.WriteLine("Id:" + user.Id + "Name:" + user.Name + "角色:" + user.Group);
System.Console.Read();
}
2.之前在做Winform的时候经常回使用到SqlHelper,现在也有很多公司是这么使用的,当时很多东西感觉是重复性的操作,一度以为编程只是复制粘贴,下面这段代码大家应该很常见:
List<Person> list = new List<Person>();
SqlDataReader sdr = new SqlDataReader();
while (sdr.Read())
{
Person person = new Person();
person.Name = sdr.GetString(0);
//....下面类似
list.Add(person);
}
开始写的时候觉得是锻炼了,写的多了觉得无聊了,其实完全可以换一种方式来实现上面的代码:
public static List<T> ConvertData<T>(SqlDataReader sdr)
{
List<T> list = new List<T>();
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties();
while (sdr.Read())
{
T model = Activator.CreateInstance<T>();
for (int i = 0; i < properties.Length; i++)
{
for (int j = 0; j < sdr.FieldCount; j++)
{
//判断属性的名称和字段的名称是否相同
if (properties[i].Name == sdr.GetName(j))
{
Object value =sdr[j];
//将字段的值赋值给User中的属性
properties[i].SetValue(model, value, null);
}
}
}
list.Add(model);
}
return list;
}
List<User> list = new List<User>();
SqlDataReader sdr = cmd.ExecuteReader();
list = ConvertData<User>(sdr);

sales@spasvo.com