原文地址:點擊開啟連結
適用:普通的對象,並且有預設的無參數建構函式
#region 將一個對象轉換為指定類型 /// <summary> /// 將一個對象轉換為指定類型 /// </summary> /// <param name="obj">待轉換的對象</param> /// <param name="type">目標類型</param> /// <returns>轉換後的對象</returns> public static object ConvertToObject(object obj, Type type) { if (type == null) return obj; if (obj == null) return type.IsValueType ? Activator.CreateInstance(type) : null; Type underlyingType = Nullable.GetUnderlyingType(type); if (type.IsAssignableFrom(obj.GetType())) // 如果待轉換對象的類型與目標類型相容,則無需轉換 { return obj; } else if ((underlyingType ?? type).IsEnum) // 如果待轉換的對象的基底類型為枚舉 { if (underlyingType != null && string.IsNullOrEmpty(obj.ToString())) // 如果目標類型為可空枚舉,並且待轉換對象為null 則直接返回null值 { return null; } else { return Enum.Parse(underlyingType ?? type, obj.ToString()); } } else if (typeof(IConvertible).IsAssignableFrom(underlyingType ?? type)) // 如果目標類型的基底類型實現了IConvertible,則直接轉換 { try { return Convert.ChangeType(obj, underlyingType ?? type, null); } catch { return underlyingType == null ? Activator.CreateInstance(type) : null; } } else { TypeConverter converter = TypeDescriptor.GetConverter(type); if (converter.CanConvertFrom(obj.GetType())) { return converter.ConvertFrom(obj); } ConstructorInfo constructor = type.GetConstructor(Type.EmptyTypes); if (constructor != null) { object o = constructor.Invoke(null); PropertyInfo[] propertys = type.GetProperties(); Type oldType = obj.GetType(); foreach (PropertyInfo property in propertys) { PropertyInfo p = oldType.GetProperty(property.Name); if (property.CanWrite && p != null && p.CanRead) { property.SetValue(o, ConvertToObject(p.GetValue(obj, null), property.PropertyType), null); } } return o; } } return obj; } #endregion
以上就是C# 將一個對象轉換為指定類型的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!