nullable类型

nullable类型nbsp 如何在 C sharp2 0 中使用可省时防错的 nullabletype 作者 ZachSmith Builder2006 09 1911 15PM

 

如何在
C-sharp 2.0
中使用可省时防错的
nullable types
作者:
Zach Smith, Builder
2006-09-19 11:15 PM
 
 

C# 2.0
出现之前,
C#
程序员最感头痛的一件事是不能对某种类型变量指定
null
值。例如:对于
int
类型,则不能对变量赋
null
值。对于
DateTime
对象也是一样。这一限制迫使程序开发员不得不提出自己的方案与在工作区设置一个非
null
变量到
null
。在
C#2.0
中,微软采用一种
nullable
类型弥补了这一缺陷。
Nullable
类型允许分配一个
null


值类型

,但是这在以前是不允许的。以前有些类型的例子不允许指定
null
值,包括
DateTime

int

float

decimal
使用
Nullable Types
如何使用
nullable
类型呢?
C#2.0
提供了一个新的



类型修饰成分(问号)用于指定需要例示的
nullable
类型。下面代码(
Figure A
)说明了如何使用几种普通的
nullable
类型:
Figure A
nullable类型
几种普通的
nullable
类型
定义
nullable
类型后,则可以将变量的值设置成
null
。以下代码(
Figure B
)演示如何赋值,以及如何测试
null
变量值。
Figure B
nullable类型
变量检测
请注意,以上显示的
CheckNull
函数参数列表,我们必须使用?修饰成分说明
nullable
类型,如果不使用这个符号,则参数不被认为是
nullable
类型。
Nullable
类型拥有一个称为

HasValue

的属性,如果对象是一个值,则返回真值,如果对象是
null
,则返回
false
值。

HasValue

的使用实例请见于
Figure C

 

Figure C
nullable类型
HasValue

除了

HasValue


nullable
类型还包含一个属性

Value

,它返回
nullable
对象的当前值。但是,当对象也被设置成
null
时,调用

value

属性则会跳出一个
InvalidOperationException
异常,并且给出信息:
“Nullable
对象必须有值


Figure D
说明了使用

Value

属性的过程。

Figure D
nullable类型
Value
property

GetValueOrDefault

也是
nullable
类型的一个属性。这一属性返回对象的当前值;或者,如果对象为
null
,则返回类型的默认值。例如:对于
“int


对象,如果此对象没有值,则其默认值为
0
。请参考以下代码(
Figure E
)实例。
Figure E
nullable类型
GetValueOrDefault
操作符??
C# 2.0
提出能对
nullable
类型进行操作的新操作符

??

(双问号)。这个操作符允许将
nullable
类型重新指定为非
nullable
类型,并且如果
nullable
类型的值是
null
,还可以重新定义值。
Figure F
给出了示例
Figure F
nullable类型
操作符
??
向数据库发送
nullable type
向数据库发送
nullable
类型相当简单。对于
null
值时,则插入

DBNull

即可。为了完成这个任务,我们使用??操作符并且指派(
cast

DBNull
给对象。这一指派是必须的,因为??操作符的另一端对象需要相兼容。以下代码(
Figure G
)演示了如何将
nullable
类型作为一个存储程序参数发送到数据库。
Figure G
nullable类型
DBNull
程序
节约时间
本文详细解释
nullable
类型的概念以及使用这些概念的要领。如果操作得当,使用
nullable
类型能够节约开发时间,便于项目维护。在项目开发中大家可以使用它们。
 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224446.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:55
下一篇 2026年3月17日 上午11:55


相关推荐

  • TransactionScope事务处理

    TransactionScope事务处理在我们日常开发的时候,有时候程序需要使用到事务,就比如,我们日常最熟悉的一个流程,那么就是银行的取款,当用户从ATM机器选择取款1000元的时候,恰巧这个时候如果停电,如果没有事务那么将会出现不堪设想的后果,银行都会倒闭。最近在开发一个功能,需要根据单据的信息生成2张单据,要么全部保存,要么都保存失败,做到事务的一致性、原子性,一开始我想到的是SQL和存储过程级别的事务,但是好像按照当前的系统的业务逻辑,这个方法的底层还是拼接SQL语句,后面又想着使用C#的ADO.NET级别的事务,根据数据生成sql,但

    2022年7月19日
    19
  • Python字符串转义符大全

    Python字符串转义符大全0 NUL 空字符 ascii 值 0 1 SOH 标题开始 ascii 值 1 2 STX 正文开始 ascii 值 2 3 ETX 正文结束 ascii 值 3 4 EOT 传输结束 ascii 值 4 5 ENQ 请求 ascii 值 5 6 ACK 收到通知 ascii 值 6 7 BEL 响铃 ascii 值 7 a BEL 响铃 ascii 值 7 b BS 退格 ascii 值 8 t HT 水平制表符 ascii 值 9 n NL 换行键 ascii 值 10 v VT 垂直制表符 ascii 值 11 f FF 换页键 ascii 值 12

    2026年3月17日
    2
  • linux系统移植步骤_安卓系统移植难吗

    linux系统移植步骤_安卓系统移植难吗一:搭建嵌入式Linux开发环境1.准备开发主机,目标机(开发板)和连接介质的硬件2.准备需要移植的系统的代码

    2025年11月23日
    6
  • GPT-5.4 API 上线了,在openClaw龙虾中试试

    GPT-5.4 API 上线了,在openClaw龙虾中试试

    2026年3月13日
    1
  • 小心踩雷,一次Java内存泄漏排查实战

    小心踩雷,一次Java内存泄漏排查实战前些日子小组内安排值班 轮流看顾我们的服务 主要做一些报警邮件处理 Bug 排查 运营 issue 处理的事 工作日还好 无论干什么都要上班的 若是轮到周末 那这一天算是毁了 不知道是公司网络广了就这样还是网络运维组不给力 网络总有问题 不是这边交换机脱网了 就是那边路由器坏了 还偶发地各种超时 而我们灵敏的服务探测服务总能准确地抓住偶现的小问题 给美好的工作加点料

    2026年3月17日
    2
  • oracle 10g数据库连接时,错误ora12514 解决办法

    oracle 10g数据库连接时,错误ora12514 解决办法主要注意三点:1。在oracle安装目录下,..\oracle\product\10.2.0\db_1\NETWORK\ADMIN修改listener.ora文件,SID_LIST_LISTENER =  (SID_LIST =    (SID_DESC =      (SID_NAME = PLSExtProc)      (ORACLE_HOME = D:\oracle

    2022年7月15日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号