您的位置:首页 > 数据库

nullable数据类型和c#2.0运算符“??”,数据库可能为空时候的一种处理办法

2008-04-10 10:28 861 查看
nullable数据类型

定义一个nullable类型非常类似于定义一个非nullable类型。不同之处在于使用类型修饰符“?”。比如定义一个整型如下:
int myInt = 1;

要使一个整型变量可以存储一个null值,可以如下声明:
int? myNullableInt = 1;

这两个变量看起来似乎是一样的。但事实并非如此。实际上,Nullable类型是一个结构体,它有两个公开可读字段:HasValue和Value。HasValue是一个布尔值,当有值存储时它为真,当变量值为null时HasValue为假。当HavValue为真是时,可以取得变量的值;为假时,当尝试取得变量的值时会抛出一个异常。
使用nullable类型
一个Nullable型变量可以像一般值类型那样使用。在编译过程中Nullable型变量和非Nullable型变量会进行隐式田转换。就是说我们可以把一个标准整型赋给一个整型Nullable变量,反之亦然。参考下面示例代码:
int? nFirst = null;
int  Second = 2;

nFirst = Second;    // 可以
nFirst = 123;       // 可以
Second = nFirst;    //也可以,因为此时nFirst==123

nFirst = null;      // 可以
Second = nFirst;    // 抛出异常, Second 是一个非nullable型变量。

可以看到,只要一个Nullable型变量的值不是null,它就可以和一个非Nullable型变量交换变量的值。如果包含null值,
就会抛出异常。为避免异常发生,可以利用Nullable型变量的HasValue属性。

if (nFirst.HasValue) Second = nFirst;
如上所示,如果nFirst 含有一个值,这个赋值语句就会运行;否则,就会跳过

移除空值
     C#2.0同时也提供一个新操作符’??’用来合并空值。其语法格式如下:
returnValue = first ?? second;
在这个语句中,如果first为非null,则first的值会被赋给returnValue;如果first为null,则second会被赋给returnValue。

注:returnValue可以是Nullable类型也可以是非Nullable类型。

如果要将一个Nullable变量的值赋给一个非Nullable变量,可以用下面方法:
int? ValA= 123;
int? ValB = null;


int NewVarA = ValA ?? -1;
int NewVarB = ValB ?? -1;
上面这段代码运行完以后,NewVarA的值为123,因为ValA的值不是null。而NewVarB值变为 -1,因为ValB为null。这就允许我们利用一个null值将一个变量转变成一个默认值。在上面的代码中,这个默认值为 -1。
英文原文:http://www.codeguru.com/Csharp/.NET/net_data/datagrid/article.php/c10393
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: