47 lines
1.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|