C# 将一个对象转换为指定类型
2023-09-14 09:03:17 时间
原文地址:点击打开链接
适用:普通的对象,并且有默认的无参数构造函数
#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,则直接转换 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# 串口通信 stm32 电机
- c#数组赋初值_C#数组初始化
- C#使用#ziplib压缩和解压缩文件
- c# mysql executenonquery_C#与数据库访问技术总结(八)之ExecuteNonQuery方法
- C# const:常量定义
- 使用C ORM加快MySQL访问速度(C# orm mysql)
- 数据C轻松读取Oracle数据库(c# 读取oracle)
- C#Stream和byte[]之间的转换
- c#类型转换
- C#汉字转换拼音技术详解(高性能)
- 使用C#处理WebBrowser控件在不同域名中的跨域问题
- C#数值转换-隐式数值转换表参考
- C#DataTable转换为实体类对象实例
- 使用C#开源文件实时监控工具Tail&TailUI介绍
- C#生成XML的三种途径小结
- C#全角和半角转换以及判断的简单代码
- C#枚举数值与名称的转换实例分享
- c#高效比对大量图片的实例代码
- C#常用的数据格式转换汇总
- C#IP地址与整数之间转换的具体方法
- C#Struct的内存布局问题解答
- c#转换全角半角方法示例
- c#实现服务器性能监控并发送邮件保存日志
- c#同步两个子目录文件示例分享两个文件夹同步
- c#和net存取cookies操作示例
- C#中登录窗体和欢迎窗体关闭方法分析
- C#委托delegate实例解析
- C#实现将记事本中的代码编译成可执行文件的方法
- C#基础之匿名方法实例教程