C#通用类型转换 Convert.ChangeType
2015-01-22 18:47
453 查看
//转换对象的成任何类型
//通用型
//效率不见得有多高
//当做特殊情况处理或者练习的话可以
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.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);
}
//转载自 http://www.cnblogs.com/youring2/archive/2012/07/26/2610035.html
//通用型
//效率不见得有多高
//当做特殊情况处理或者练习的话可以
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.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);
}
//转载自 http://www.cnblogs.com/youring2/archive/2012/07/26/2610035.html
相关文章推荐
- C#通用类型转换 Convert.ChangeType
- C#通用类型转换 Convert.ChangeType
- C#通用类型转换 Convert.ChangeType
- C# Convert.ChangeType() 将未知类型转换为已知类型
- DEMO[C#]TypeChange 关于类型转换的一个DEMO
- 【原创】C#两种任意类型转换支持(示例:String convert to Type)
- 强化System.Convert.ChangeType, 使其能够转换枚举ENUM和可空类型Nullable
- System.Convert.ChangeType 转换数据类型
- ASP.NETC#通用扩展函数之TypeParse 类型转换方便多了
- DEMO[C#]TypeChange 关于类型转换的一个DEMO
- Convert.ChangeType转换泛型的性能损失测试
- Cannot convert type 'ASP.login_aspx' to 'System.Web.UI.WebControls.Login'(无法将类型'ASP.login_aspx' 转换为'System.Web.UI.WebControls.Lo
- 在C#中对于null/DBNull.Value值进行类型转换时,除了Convert.ToString()之外,其他的转换都会报空引用异常;
- 将一个值的类型转化成与其属性对应的类型Convert.ChangeType
- C#简单通用的进制转换,把非十进制的数据类型转换成十进制的,然后再转换成其他类型。
- C#通用类型转换方法
- (原创)c#学习笔记05--变量的更多内容01--类型转换03--使用Convert命令进行显式转焕
- 由"Type mismatch: cannot convert from View to ProgressBar"联想到的类型转换错误的根源
- 2) 转换类型typeConvert [原创,泛型编程,自由下载转载,需注明出处]
- C#中的日期类型无法直接转换成Access中的日期类型OleDbType.DBDate