日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两个不相同的类之间如果赋值

發布時間:2024/7/5 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两个不相同的类之间如果赋值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/// <summary> /// 類屬性/字段的值復制工具 /// </summary> public class ClassValueCopier{/// <summary> /// 復制 /// </summary> /// <param name="destination">目標</param> /// <param name="source">來源</param> /// <returns>成功復制的值個數</returns> public static int Copy(object destination, object source){if (destination == null || source == null){return 0;}return Copy(destination, source, source.GetType());}/// <summary> /// 復制 /// </summary> /// <param name="destination">目標</param> /// <param name="source">來源</param> /// <param name="type">復制的屬性字段模板</param> /// <returns>成功復制的值個數</returns> public static int Copy(object destination, object source, Type type){return Copy(destination, source, type, null);}/// <summary> /// 復制 /// </summary> /// <param name="destination">目標</param> /// <param name="source">來源</param> /// <param name="type">復制的屬性字段模板</param> /// <param name="excludeName">排除下列名稱的屬性不要復制</param> /// <returns>成功復制的值個數</returns> public static int Copy(object destination, object source, Type type, IEnumerable<string> excludeName){if (destination == null || source == null){ return 0; }if (excludeName == null){excludeName = new List<string>();}int i = 0;Type desType = destination.GetType();foreach (FieldInfo mi in type.GetFields()){if (excludeName.Contains(mi.Name)){ continue; }try{FieldInfo des = desType.GetField(mi.Name);if (des != null && des.FieldType == mi.FieldType){des.SetValue(destination, mi.GetValue(source)); i++;}}catch{}}foreach (PropertyInfo pi in type.GetProperties()){if (excludeName.Contains(pi.Name)){continue;}try{PropertyInfo des = desType.GetProperty(pi.Name);if (des != null && des.PropertyType == pi.PropertyType && des.CanWrite && pi.CanRead){des.SetValue(destination, pi.GetValue(source, null), null);i++;}}catch{//throw ex; }}return i;}}#region 擴展方法 For .NET 3.0+/// <summary> /// 類屬性/字段的值復制工具 擴展方法 /// </summary> public static class ClassValueCopier2{/// <summary> /// 獲取實體類的屬性名稱 /// </summary> /// <param name="source">實體類</param> /// <returns>屬性名稱列表</returns> public static List<string> GetPropertyNames(this object source){if (source == null){return new List<string>();}return GetPropertyNames(source.GetType());}/// <summary> /// 獲取類類型的屬性名稱(按聲明順序) /// </summary> /// <param name="source">類類型</param> /// <returns>屬性名稱列表</returns> public static List<string> GetPropertyNames(this Type source){return GetPropertyNames(source, true);}/// <summary> /// 獲取類類型的屬性名稱 /// </summary> /// <param name="source">類類型</param> /// <param name="declarationOrder">是否按聲明順序排序</param> /// <returns>屬性名稱列表</returns> public static List<string> GetPropertyNames(this Type source, bool declarationOrder){if (source == null){return new List<string>();}var list = source.GetProperties().AsQueryable();if (declarationOrder){list = list.OrderBy(p => p.MetadataToken);}return list.Select(o => o.Name).ToList(); ;}/// <summary> /// 從源對象賦值到當前對象 /// </summary> /// <param name="destination">當前對象</param> /// <param name="source">源對象</param> /// <returns>成功復制的值個數</returns> public static int CopyValueFrom(this object destination, object source){return CopyValueFrom(destination, source, null);}/// <summary> /// 從源對象賦值到當前對象 /// </summary> /// <param name="destination">當前對象</param> /// <param name="source">源對象</param> /// <param name="excludeName">排除下列名稱的屬性不要復制</param> /// <returns>成功復制的值個數</returns> public static int CopyValueFrom(this object destination, object source, IEnumerable<string> excludeName){if (destination == null || source == null){return 0;}return ClassValueCopier.Copy(destination, source, source.GetType(), excludeName);}/// <summary> /// 從當前對象賦值到目標對象 /// </summary> /// <param name="source">當前對象</param> /// <param name="destination">目標對象</param> /// <returns>成功復制的值個數</returns> public static int CopyValueTo(this object source, object destination){return CopyValueTo(destination, source, null);}/// <summary> /// 從當前對象賦值到目標對象 /// </summary> /// <param name="source">當前對象</param> /// <param name="destination">目標對象</param> /// <param name="excludeName">排除下列名稱的屬性不要復制</param> /// <returns>成功復制的值個數</returns> public static int CopyValueTo(this object source, object destination, IEnumerable<string> excludeName){if (destination == null || source == null){return 0;}return ClassValueCopier.Copy(destination, source, source.GetType(), excludeName);}}#endregion

  

轉載于:https://www.cnblogs.com/dandan00056/p/11425687.html

總結

以上是生活随笔為你收集整理的两个不相同的类之间如果赋值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。