C# 利用反射进行类型转换
/// <summary> /// 父类转子类 /// </summary> /// <typeparam name="TParent"></typeparam> /// <typeparam name="TChild"></typeparam> /// <param name="parent"></param> /// <returns></returns> public static TChild AutoCopy<TParent, TChild>(TParent parent) where TChild : TParent, new() { TChild child = new TChild(); var ParentType = typeof(TParent); var Properties = ParentType.GetProperties(); foreach (var Propertie in Properties) { //循环遍历属性 if (Propertie.CanRead && Propertie.CanWrite) { //进行属性拷贝 Propertie.SetValue(child, Propertie.GetValue(parent, null), null); } } return child; } /// <summary> /// 类型转换 /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="R"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static R ToResult<T, R>(T obj) where R : new() { R t = new R(); var props = typeof(T).GetProperties().Where(a => a.CanRead && a.CanWrite); foreach (var item in props) { item.SetValue(t, item.GetValue(obj, null), null); } return t; } /// <summary> /// 检查对象中的属性是有有null值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <returns></returns> public static bool CheckObjHaveNullFiled<T>(T t) { if (t == null) { return true; } else { //属性列表 var proList = typeof(T).GetProperties(); return proList.Where(a => a.GetValue(t, null) == null || string.IsNullOrEmpty(a.GetValue(t, null).ToString().Trim())).Count() > 0; } }