nullable数据类型和c#2.0运算符“??”,数据库可能为空时候的一种处理办法
2008-04-10 10:28
861 查看
nullable数据类型
定义一个nullable类型非常类似于定义一个非nullable类型。不同之处在于使用类型修饰符“?”。比如定义一个整型如下:
要使一个整型变量可以存储一个null值,可以如下声明:
这两个变量看起来似乎是一样的。但事实并非如此。实际上,Nullable类型是一个结构体,它有两个公开可读字段:HasValue和Value。HasValue是一个布尔值,当有值存储时它为真,当变量值为null时HasValue为假。当HavValue为真是时,可以取得变量的值;为假时,当尝试取得变量的值时会抛出一个异常。
使用nullable类型
一个Nullable型变量可以像一般值类型那样使用。在编译过程中Nullable型变量和非Nullable型变量会进行隐式田转换。就是说我们可以把一个标准整型赋给一个整型Nullable变量,反之亦然。参考下面示例代码:
if (nFirst.HasValue) Second = nFirst;
如上所示,如果nFirst 含有一个值,这个赋值语句就会运行;否则,就会跳过
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
定义一个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
相关文章推荐
- System.Nullable<T> int? 数据库中的int类型可以为空 在C# 中 的处理
- visual studio编写C#代码时“未能从程序集.....中加载类型”和“找不到方法”的一种可能的解决办法
- visual studio编写C#代码时“未能从程序集.....中加载类型”和“找不到方法”的一种可能的解决办法
- 数据库中字段类型对应的C#中的数据类型
- C#中,当从数据库中查询到数据,以DataTable类型返回后,如果需要对DataTable中的数据进行筛选,可以选择下面的方式
- 运用C#处理lob数据类型 (Oracle)
- 数据库中与C#中的数据类型对照
- Date 类型数据为0000-00-00时JDBC,Hibernate处理办法
- Essential C# 2.0》读书笔记 第二章 数据类型
- 数据库中与C#中的数据类型对照
- 数据库和C#数据类型的对应关系
- 查询数据库语句报错“数据类型 text 和 varchar 在 equal to 运算符中不兼容。"
- C#与SQL Server之间的数据类型对比及在VS2003中空值传递的解决办法(上)
- SilverLight C#中char(1)数据类型页面显示解决办法(讨论)
- 数据库中与C#中的数据类型对照
- 数据库中与C#中的数据类型对照
- mongo对象var_dump的时候无法显示更多数据的处理办法
- 【C#】变量、运算符和数据类型总结
- 数据库莫名变慢的一种可能原因和解决办法.
- 数据库取出的数据含有html标签处理办法