Falcon.Extend/Faclon.Extend/ObjectExtend.cs

47 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
namespace Faclon.Extend
{
/// <summary>
/// Object扩展
/// </summary>
public static class ObjectExtend
{
/// <summary>
/// 将当前对象属性赋值到目标对象属性中。
/// </summary>
/// <param name="source">当前对象</param>
/// <param name="target">目标属性</param>
/// <param name="option">复制选项</param>
public static void CopyTo(this object source,object target,ObjectCopyToOption option = null) {
if(source == null)
throw new ArgumentNullException(nameof(source));
if(target == null)
throw new ArgumentNullException(nameof(target));
option = option ?? ObjectCopyToOption.Default;
foreach(var ps in source.GetType().GetProperties()) {
if(ps.CanRead) {
var pt = target.GetType().GetProperty(ps.Name);
if(pt.CanWrite && ps.PropertyType.IsAssignableFrom(pt.PropertyType)) {
pt.SetValue(target,ps.GetValue(source,null),null);
}
}
}
}
/// <summary>
/// 根据提供的更新方法更新目标对象属性
/// </summary>
/// <typeparam name="TSource">原对象类型</typeparam>
/// <typeparam name="TTarget">目标对象类型</typeparam>
/// <param name="source">原对象</param>
/// <param name="target">目标对象</param>
/// <param name="action">转换方法</param>
public static void CopyTo<TSource, TTarget>(this TSource source,TTarget target,Action<TSource,TTarget> action) {
action(source,target);
}
}
}