值转换为可空类型

简介: int? 这种类型实际上是Nullable类型的实例,这里不过多介绍Nullable,只说明一点它在int的基础上可存储了null值,有时候在数据库操作时,我们会创建一个用于封装所需参数的类Model,若数据库中某个Int类型的字段可为空,为了保证与数据库同步,我们会在Model里给该字段定义为int?类型,但在查询取出来的时候就出现问题了,如果数据库中是空,reader["xxx"] 返回的是object类型,而我们要转为int类型只能Convert.ToInt32(reader["xxx"]); 但这时候reader["xxx"]的值为{} Dbnull.Value 空的意思。

int? 这种类型实际上是Nullable<int>类型的实例,这里不过多介绍Nullable,只说明一点它在int的基础上可存储了null值,有时候在数据库操作时,我们会创建一个用于封装所需参数的类Model,若数据库中某个Int类型的字段可为空,为了保证与数据库同步,我们会在Model里给该字段定义为int?类型,但在查询取出来的时候就出现问题了,如果数据库中是空,reader["xxx"] 返回的是object类型,而我们要转为int类型只能Convert.ToInt32(reader["xxx"]); 但这时候reader["xxx"]的值为{} Dbnull.Value 空的意思。空是无法转换成Int32的 会抛出异常的 但是有没有方法能狗Convert.ToInt32?,使用int32?强转同样会抛异常,这时怎么办呢?? ?: 都会告诉你两侧类型不一致导致无法使用。

 

 1   public static object ChanageType(this object value, Type convertsionType)
 2         {
 3             //判断convertsionType类型是否为泛型,因为nullable是泛型类,
 4             if (convertsionType.IsGenericType &&
 5                 //判断convertsionType是否为nullable泛型类
 6                 convertsionType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
 7             {
 8                 if (value == null || value.ToString().Length == 0)
 9                 {
10                     return null;
11                 }
12 
13                 //如果convertsionType为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换
14                 NullableConverter nullableConverter = new NullableConverter(convertsionType);
15                 //将convertsionType转换为nullable对的基础基元类型
16                 convertsionType = nullableConverter.UnderlyingType;
17             }
18             return Convert.ChangeType(value, convertsionType);
19         }

 

目录
相关文章
|
8月前
|
网络安全 Python
这个错误是由于在将字符串类型的值转换为字典类型时出现了问题
【2月更文挑战第20天】这个错误是由于在将字符串类型的值转换为字典类型时出现了问题
38 1
|
2月前
|
Python
整型数据与字符串类型的数据进行相加
整型数据与字符串类型的数据进行相加。
60 9
|
7月前
|
存储 Kotlin
Kotlin中布尔类型、字符类型、字符串类型和数组类型
Kotlin中布尔类型、字符类型、字符串类型和数组类型
|
3月前
|
C#
C#中的数组型参数学习笔记
C#中的数组型参数学习笔记
33 0
|
4月前
|
存储 JavaScript Java
静态整型和静态字符串类型
静态整型和静态字符串类型
36 0
|
存储 Go
Go 语言的基础数据类型:整数类型、浮点数类型、布尔类型、字符串类型等
Go 语言的基础数据类型:整数类型、浮点数类型、布尔类型、字符串类型等
81 0
Go 语言的基础数据类型:整数类型、浮点数类型、布尔类型、字符串类型等
引用传递示例,以及String类型如何传递的原理
大家都知道值传递和引用传递,下面我来通过以一个问题和示例来解决引用类型传递的原理         1)先创建了引用类型Person里面有String name 和int age          2)new 一个对象,把这个对象的值赋给a,再把a赋给Person类型的b
转成String类型的几种方式
转成String类型的几种方式
120 0
|
存储 关系型数据库 MySQL
尽量使用数值替代字符串类型
尽量使用数值替代字符串类型
|
存储 关系型数据库 MySQL
四、尽量使用数值替代字符串类型
四、尽量使用数值替代字符串类型
62 0