C# 利用反射和递归,深度克隆对象实例

/// <summary>
/// 深度克隆对象
/// </summary>
/// <typeparam name="T"></typeparam>
public class TransExpV1<T>
{
public static T Trans(T t)
{
dynamic ret = (T)Activator.CreateInstance(typeof(T));
foreach (var item in typeof(T).GetProperties())
{
if (!item.CanWrite)
continue;

if (item.PropertyType.BaseType == typeof(ValueType))
{
item.SetMethod.Invoke(ret, new[] { item.GetValue(t) });
}
else
{
var type = typeof(TransExpV1<>).MakeGenericType(item.PropertyType);
var aContext = Activator.CreateInstance(type);
var tIn = item.GetValue(t);
var val = aContext.GetType().GetMethod("Trans")
?.Invoke(aContext, new[]
{
tIn
});
item.SetMethod.Invoke(ret, new[] { val });
}
}
return ret;
}
}

posted @ 2022-05-26 11:26  Jazz_Law  阅读(144)  评论(0编辑  收藏  举报
#RecentCommentsBlock li { margin: 0; width: 275px; } #RecentCommentsBlock li.recent_comment_body { border-radius: 0; margin: 0; } #RecentCommentsBlock li.recent_comment_title { border-radius: 5px 5px 0 0; margin: 3px 0 0; } #RecentCommentsBlock li.recent_comment_author { border-radius: 0 0 5px 5px; margin: 0; } .desc_img{ width:75px; max-width:75px; } #blog-calendar{ background:white; } /* comment */ div.commentform{ margin-bottom:100px; } #commentform_title { background: url("http://static.cnblogs.com/images/icon_addcomment.gif") no-repeat scroll 0 2px; color: #0078d8; font-size:14px; } div.commentform p{ margin-bottom:10px; } .comment_btn { height: 35px; width: 90px; background: none repeat scroll 0 0 #0078d8; border: 0 none; border-radius: 5px; color: white; cursor:pointer; } .comment_btn:hover{ background:#317ef3; } #commentbox_opt,#commentbox_opt + p { text-align:center; } #tbCommentBody{ width:100%; resize:none; } #tbCommentAuthor,#tbCommentBody{ border:1px solid #0078d8; } #tbCommentBody:hover{ border:1px solid #fca021; } #comments > h3 { background: none repeat scroll 0 0 #0078d8; border-radius: 3px; color: white; padding: 8px; border:0 none; font-size:14px; } #comments{ font-size: 13px; } #comments h4{ margin-top:10px; } #comments h4 span { color: #6c6351; font-size: 12px; } .comment_actions { border-bottom: 1px dashed #0078d8; display: block; padding-bottom: 10px; } .blog_comment_body { color: #111; font-size: 13px; margin-bottom: 10px; margin-top: 10px; } #comment_nav { font-size: 14px; margin-top: 10px; text-align: right; }