C#中类属性的拷贝,支持属性名忽略大小写

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 );
                    }
                }
			}
		}

	}
}

猜你喜欢

转载自blog.csdn.net/qq_17847881/article/details/130402662