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

该代码实现了一个静态方法,用于在C#中快速拷贝两个对象之间的同名公共属性,支持忽略属性名的大小写差异。方法通过反射获取并比较源对象和目标对象的属性,匹配名称后进行赋值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值