C# 將一個物件轉換為指定型別
原文地址:點選開啟連結
適用:普通的物件,並且有預設的無引數建構函式
#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
相關文章
- 使用eval()將json字串轉換為物件要多加一個小括號JSON字串物件
- C# 將PDF文件轉換為Markdown文件C#
- JavaScript將物件轉換為JSON格式字串JavaScript物件JSON字串
- eval()將JSON格式字串轉換為物件JSON字串物件
- js將物件直接量轉換為字串形式JS物件字串
- JavaScript將JSON格式字串轉換為物件JavaScriptJSON字串物件
- arraylist.toarray轉換為指定型別的array及drawlines折線型別
- 將timestamp型別轉換為date型別型別
- 劍指offer(Java版)--將字串轉換為整數Java字串
- jQuery將類陣列物件轉換為陣列jQuery陣列物件
- javascript如何將時間日期轉換為Date物件JavaScript物件
- 如何將時間字串轉換為時間物件字串物件
- javascript將時間物件轉換為時間戳JavaScript物件時間戳
- js將物件轉換為字串程式碼例項JS物件字串
- C# 型別轉換C#型別
- 字串:怎樣將數字型別轉換為字串 (轉)字串型別
- 使用 SpanMetrics Connector 將 OpenTelemetry 跟蹤轉換為指標指標
- 將一個非分割槽錶轉換為分割槽表
- js將字串轉換為xml物件程式碼例項JS字串XML物件
- jquery實現將字串轉換為json格式物件jQuery字串JSON物件
- javascript將物件轉換為數字程式碼例項JavaScript物件
- java json字串轉換為物件,轉換為listJavaJSON字串物件
- Java物件為空時,不顯示該物件屬性,或者將null轉換為""Java物件Null
- 把一個任意型別的值轉換為布林型別型別
- 使用C#,VB和Java將PDF轉換為DOC / DOCXJava
- 一個克隆物件的C#基類 (轉)物件C#
- JS中將一個值轉換為字串的3種方法JS字串
- 【分割槽】如何將一個普通錶轉換為分割槽表
- js將時間日期物件轉換為時間日期字元JS物件字元
- 第11章 使用類——型別轉換(二)將自定義型別轉換為內建型別型別
- C#中將DataTable型別轉化為泛型集合C#型別泛型
- Rust中如何將本地時間轉換為另一個時區?Rust
- C# 將HTML轉為XMLC#HTMLXML
- C# 將Excel轉為XMLC#ExcelXML
- C# 將PDF轉為ExcelC#Excel
- C# 將OFD轉為PDFC#
- eval() JSON轉換為物件JSON物件
- js將時間日期字串轉換為時間日期Date物件JS字串物件