nullable类型

来源:互联网 发布:数据集成架构图 编辑:程序博客网 时间:2024/05/14 12:29
 
如何在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值,包括DateTimeintfloat decimal
使用 Nullable Types
如何使用nullable类型呢?C#2.0提供了一个新的类型修饰成分(问号)用于指定需要例示的nullable类型。下面代码(Figure A)说明了如何使用几种普通的nullable类型:
Figure A
几种普通的nullable类型
定义nullable类型后,则可以将变量的值设置成null。以下代码(Figure B)演示如何赋值,以及如何测试null变量值。
Figure B
变量检测
请注意,以上显示的CheckNull函数参数列表,我们必须使用?修饰成分说明nullable类型,如果不使用这个符号,则参数不被认为是nullable类型。
Nullable类型拥有一个称为HasValue的属性,如果对象是一个值,则返回真值,如果对象是null,则返回false值。HasValue的使用实例请见于Figure C
 
Figure C
HasValue
除了
HasValuenullable类型还包含一个属性Value,它返回nullable对象的当前值。但是,当对象也被设置成null时,调用value属性则会跳出一个InvalidOperationException异常,并且给出信息:“Nullable 对象必须有值Figure D说明了使用Value属性的过程。
Figure D
Value property
GetValueOrDefault也是nullable类型的一个属性。这一属性返回对象的当前值;或者,如果对象为null,则返回类型的默认值。例如:对于“int对象,如果此对象没有值,则其默认值为0。请参考以下代码(Figure E)实例。
Figure E
GetValueOrDefault
操作符??
C# 2.0提出能对nullable类型进行操作的新操作符??(双问号)。这个操作符允许将nullable类型重新指定为非nullable类型,并且如果nullable类型的值是null,还可以重新定义值。Figure F给出了示例
Figure F
操作符 ??
向数据库发送nullable type
向数据库发送nullable 类型相当简单。对于null值时,则插入DBNull即可。为了完成这个任务,我们使用??操作符并且指派(castDBNull给对象。这一指派是必须的,因为??操作符的另一端对象需要相兼容。以下代码(Figure G)演示了如何将nullable类型作为一个存储程序参数发送到数据库。
Figure G
DBNull 程序
节约时间
本文详细解释nullable类型的概念以及使用这些概念的要领。如果操作得当,使用nullable类型能够节约开发时间,便于项目维护。在项目开发中大家可以使用它们。
 
 
原创粉丝点击