Nullable 类型的转换

简介:

一直都是个头疼的问题,感谢maplye

1.The PumaCode.org Blog

public object ChangeType(object value, Type conversionType)
{
    if ( conversionType.IsGenericType &&
        conversionType.GetGenericTypeDefinition( ).Equals( typeof( Nullable<> ) ) ) {
 
        if(value == null)
            return null;
 
        System.ComponentModel.NullableConverter nullableConverter
            = new System.ComponentModel.NullableConverter(conversionType);
 
        conversionType = nullableConverter.UnderlyingType;
    }
 
    return Convert.ChangeType(value, conversionType);
}
 

引用:http://blog.pumacode.org/2006/05/18/using-convert-changetype-on-nullable-types/


2.Paul Wilson's .NET Blog

public class DataTypeConverter
    {
        public static object ChangeType(Type type,object value)
        {
            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);
                }
                return Enum.ToObject(type, value);
            }
            if (!type.IsInterface && type.IsGenericType)
            {
                Type type1 = type.GetGenericArguments()[0];
                object obj1 = DataTypeConverter.ChangeType(type1,value);
                return Activator.CreateInstance(type, new object[] { obj1 });
            }
            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://weblogs.asp.net/pjohnson/archive/2006/02/07/437631.aspx
本文转自today4king博客园博客,原文链接:http://www.cnblogs.com/jinzhao/archive/2009/11/03/1595076.html,如需转载请自行联系原作者
相关文章
|
2月前
|
存储
TS 自定义结构Long与number类型相互转换
TS 自定义结构Long与number类型相互转换
|
8月前
|
JavaScript 前端开发
ts -函数的类型
在 JavaScript 中,有两种常见的定义函数的方式——函数声明(Function Declaration)和函数表达式(Function Expression)
|
8月前
|
JavaScript 前端开发 索引
ts - 基础类型
TypeScript包含的最简单的数据单元有:数字,字符串,布尔值,Null 和 Undefined等。TypeScript支持与JavaScript几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用。本节介绍基础类型的布尔值、数字、字符串、数组、元组、枚举、any 和 void 等,其他几种基础类型详见 [基础类型-高级](/advanced/basic-types.html)。
|
9月前
|
JavaScript 前端开发 Java
为什么使用typeof判断数据类型的时候null出来是object?
为什么使用typeof判断数据类型的时候null出来是object?
|
10月前
|
JavaScript 编译器 开发者
TS类型断言
TypeScript中的类型断言是一种将变量或表达式的类型强制转换为开发者指定的类型的方式。可以使用尖括号(<>)语法或者as语法进行类型断言。
|
11月前
|
存储 JavaScript
【TS】object类型
【TS】object类型
52 0
|
11月前
【TS】基础类型
【TS】基础类型
41 0
【TS】基础类型
|
索引
Ts中string、number和any等类型 不能当做索引用,怎么处理?
Ts中string、number和any等类型 不能当做索引用,怎么处理?
293 0
|
JavaScript 索引
ts扩展类型
接口 interface 含义:是指对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员
ts扩展类型
|
存储 JavaScript 安全
详解 TS 基本类型
类型声明 类型声明是 TS 非常重要的一个特点。
89 0