值转换为可空类型

简介: 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         }

 

目录
相关文章
|
存储 弹性计算 NoSQL
libcuckoo论文概述
本文简要阐述libcuckoo项目的两篇论文基础。如有错漏之处,欢迎指出一起讨论交流。 ## 论文1 《MemC3: Compact and Concurrent MemCache with Dumber Caching and Smarter Hashing》 这篇论文主要讲了在多线程模式下如何提升cuckoo hash table的吞吐。 ### 问题 传统hash表在并发效率上并不
2088 0
libcuckoo论文概述
jupyter notebook中使用幻灯片放映的操作
我们在打开jupyter notebook的时候可以使用幻灯片模式进行浏览.
jupyter notebook中使用幻灯片放映的操作
|
Java Maven 数据安全/隐私保护
Maven - 发布JAR包到Maven远程中央仓库(五)
Maven - 发布JAR包到Maven远程中央仓库(五)
1167 0
Maven - 发布JAR包到Maven远程中央仓库(五)
|
存储 算法 Java
为什么重写 equals 方法时必须同时重写 hashCode 方法?
本文探讨了 Java 中 `hashCode` 方法的作用及其与 `equals` 方法的关系,解释了为什么重写 `equals` 方法时必须同时重写 `hashCode` 方法,并提供了如何正确重写 `hashCode` 方法的示例。
212 2
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
11月前
|
人工智能 自然语言处理 安全
主动式智能导购AI助手构建方案测评
主动式智能导购AI助手构建方案测评
207 12
|
人工智能 安全 新能源
祝贺!零跑汽车交付超40万台 ,携手阿里云打造新一代智能座舱
祝贺!零跑汽车交付超40万台 ,携手阿里云打造新一代智能座舱
545 10
|
存储 API 数据安全/隐私保护
FreeRTOS入门教程(信号量的概念及API函数使用)
FreeRTOS入门教程(信号量的概念及API函数使用)
773 0
|
数据采集 监控 API
如何防止恶意调用和攻击对抖音商品详情API的影响?
一、恶意调用的定义和类型 恶意调用是指未经授权或恶意意图地调用某个API,以达到获取不当利益、干扰服务运行或其他非法目的。常见的恶意调用类型包括:
|
存储 程序员 API
Qt开发技术:Qt拽拖开发(一)拽托框架详解及Demo
Qt开发技术:Qt拽拖开发(一)拽托框架详解及Demo
Qt开发技术:Qt拽拖开发(一)拽托框架详解及Demo