/// <summary> /// 轉換兩個不同類型但是成員相同的對象 /// </summary> /// <typeparam name="T">目標對象</typeparam> /// <param name="source">待轉換對象</param> /// <returns></returns> public static T CopySameFieldsObject<T>(Object source) { Type srcT = source.GetType(); Type destT = typeof(T); // 構造一個要轉換對象實例 Object instance = destT.InvokeMember("", BindingFlags.CreateInstance, null, null, null); // 這里指定搜索所有公開和非公開的字段 FieldInfo[] srcFields = srcT.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); // 將源頭對象的每個字段的值分別賦值到轉換對象里,因為假定字段都一樣,這里就不做容錯處理了 foreach (FieldInfo field in srcFields) { destT.GetField(field.Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance). SetValue(instance, field.GetValue(source)); } return (T)instance; }