C#中类属性的拷贝,支持属性名忽略大小写
using System;
namespace TestApplication
{
/// <summary>
/// 可以是不同的类,存在相同的属性即复制
/// </summary>
public static class CsPropertiesCopy
{
/// <summary>
/// 快速的拷贝同名公共属性忽略差异的字段 , 当IgnoreUppCase=true时,【忽略属性名大小写】
/// </summary>
/// <typeparam name="S">源对象类型</typeparam>
/// <typeparam name="T">目标对象类型</typeparam>
/// <param name="obj">源实例类,即有数据的类</param>
/// <param name="obj2">目标实例类,即待拷贝属性值的目标类</param>
/// <param name="IgnoreUppCase">是否忽略属性名大小写</param>
public static void CopyProperties<S,T>(S obj, T obj2,bool IgnoreUppCase = false)
{
S d = Activator.CreateInstance<S>();
System.Reflection.PropertyInfo[] info = d.GetType().GetProperties();
foreach (var item in info)
{
string value = item.GetValue(obj, null).ToString();
string name1 = "";
if (IgnoreUppCase)
{
name1 = item.Name.ToLower();
}
else
{
name1 = item.Name;
}
// 给目标对象的属性赋值
System.Reflection.PropertyInfo[] info2 = obj2.GetType().GetProperties();
foreach (var item2 in info2)
{
string name2 = "";
if (IgnoreUppCase)
{
name2 = item2.Name.ToLower();
}
else
{
name2 = item2.Name;
}
// 属性名校验通过,则对目标对象的属性,赋值
if (name1.Equals(name2))
{
item2.SetValue( obj2,value,null );
}
}
}
}
}
}