C#通用类型转换 Convert.ChangeType 转自网络

static public object ChangeType(object value, Type type)
        {
            if (value == null && type.IsGenericType) return Activator.CreateInstance(type);
            if (value == null) return null;
            if (type == value.GetType()) return value;
            if (type.IsEnum)
            {
                if (value is string)
                    return Enum.Parse(type, value as string);
                else
                    return Enum.ToObject(type, value);
            }
            if (!type.IsInterface && type.IsGenericType)
            {
                Type innerType = type.GetGenericArguments()[0];
                object innerValue = ChangeType(value, innerType);
                return Activator.CreateInstance(type, new object[] { innerValue });
            }
            if (value is string && type == typeof(Guid)) return new Guid(value as string);
            if (value is string && type == typeof(Version)) return new Version(value as string);
            if (!(value is IConvertible)) return value;
            return Convert.ChangeType(value, type);
        }

C#通用类型转换 Convert.ChangeType 转自网络

时间: 2024-10-08 20:42:21

C#通用类型转换 Convert.ChangeType 转自网络的相关文章

C#通用类型转换 Convert.ChangeType

//转换对象的成任何类型//通用型//效率不见得有多高//当做特殊情况处理或者练习的话可以 public static object ChangeType(object value, Type type){    if (value == null && type.IsGenericType) return Activator.CreateInstance(type);    if (value == null) return null;    if (type == value.GetT

Convert.ChangeType不能处理Nullable类型的解决办法(转)

https://www.cnblogs.com/patrickyu/p/3211115.html 在做一个ORMapping功能的时候发现,Convert.ChangeType不能处理nullable类型,比如int?. 解决办法也很简单,贴出完整的代码(大部分代码来自网络),注意下面代码没经过完整测试,不要直接用在项目里: public delegate void SetValue<T>(T value); public static class ORMapping<T> whe

python类型转换convert实例分析

在python的开发过程中,难免会遇到类型转换,这里给出常见的类型转换demo: 类型 说明 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象 tuple(s ) 将

类型转换 Convert.ToInt32(待转字符串);

Convert 不再仅是内存级别的转换而是考虑数据意义的转换.是一个加工改造的过程. 语法: int (变量名)=Convert.ToInt32(待转换的字符串);//把待转字符串转换成int类型后赋给变量. 例: Console.WriteLine("请输入你的语文成绩"); int chineseScore=Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入你的数学成绩"); int mathS

2016.5.23 用反射技术为实体类变量赋值、取值

clobj是任意一个数据库表对应的实体类空白实例 TERMINAL_PRO clobj= new TERMINAL_PRO(); DataRow row = dtt.Rows[0]; Type t = clobj.GetType(); foreach (PropertyInfo pi in t.GetProperties()) //不用考虑属性的类型 { string name = pi.Name; //获得此属性名称 if (dtt.Columns.Contains(name)) { obje

使用 IL 实现类型转换

在之前的文章中,我大致介绍过一些类型间的隐式和显式类型转换规则.但当时并未很仔细的研究过<CSharp Language Specification>,因此实现并不完整.而且只部分解决了类型间能否进行类型转换,仍未解决到底该如何进行类型转换,尤其是在定义泛型类型时,我们明明知道泛型类型的参数是什么类型,但就是不能直接进行类型转换: if (typeof(T) == typeof(int)) { int intValue = (int)value; // 错误:无法将类型“T”转换为“int”

泛型使用中,解决类型转换问题

遇到的问题是这样,系统中有一个字符类型的字段来存储一些通用的系统配置,虽然存储的形式是字符串,但是实际在系统中的使用类型则可能是string, bool, int, decimal. 这个时候就想写一个通用的方法来获取各种不同类型的返回值,当然这个时候想到的就是使用泛型.那么这个方法的定义大概就是这样: T GetValue<T>(string key) 这个方法涉及到一个字符串类型转换成泛型的问题. public T GetSingleConfigValue<T>(eConfig

枚举|标志枚举+|(或)和&amp;(与)运算|类型转换|值类型和引用类型|传参|异常|垃圾回收

枚举部分 enum 关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型. 通常情况下,最好是在命名空间内直接定义枚举,以便该命名空间中的所有类都能够同样方便地访问它. 但是,还可以将枚举嵌套在类或结构中.默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1. 例1: //此枚举的默认值是从0开始 enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 例2: //此枚举的默认值是从1开始,下标为3的tue值为7,从下标3开始

C#数据库操作通用方法类

平时使用的数据库操作类整理更新后备份,记录下来以供以后使用,并顺便分享给大家一起交流.直接上源码: 整个底层操作方法分为4个类,基础方法类:SqlBase 基础工具类:SqlTool 日志类:DbLog  和MSSQL操作类:MsSqlHelper. 由于平时工作未用到其他类型数据库,因此未整理其他数据库的操作类,以后用到的话会进行更新. 首先是通用的数据库底层操作方法整理: /// <summary> /// 数据库操作基础方法类 /// </summary> public cl