public static T1 Clone<T1>(this object a, T1 target = default)
{
var obj = target == null ? (T1)Activator.CreateInstance(typeof(T1)) : target;
foreach (var pbase in a.GetType().GetProperties())
{
var p = obj.GetType().GetProperties().Where(b => b.CanWrite && pbase.Name == b.Name && (pbase.PropertyType == b.PropertyType || pbase.PropertyType.IsAssignableFrom(b.PropertyType) || b.PropertyType.IsAssignableFrom(pbase.PropertyType))).SingleOrDefault(); // 考慮同型態但nullable 不同也進行複製(如 datetime? 和 datetime)
if (p != null) p.SetValue(obj, pbase.GetValue(a, null), null);
}
return obj;
}
用法:
a.Clone(b)
var b = a.Clone<xxx>()
沒有留言:
張貼留言