两个不相同的类之间如果赋值
生活随笔
收集整理的這篇文章主要介紹了
两个不相同的类之间如果赋值
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/// <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
總結
以上是生活随笔為你收集整理的两个不相同的类之间如果赋值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 下mysql5.7安装搬运
- 下一篇: CPU缓存和内存屏障