在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在C#1.x的版本中,一个值类型变量是不可以被赋予null值的,否则会产生异常。在C#2.0中,微软提供了Nullable类型,允许用它定义包含null值(即空值)的数据类型,这对处理数据库中包含可选字段以及很多方面都有很大帮助。 定义Nullable类型 定义一个nullable类型非常类似于定义一个非nullable类型。不同之处在于使用类型修饰符“?”。比如定义一个整型如下: int myInt = 1; 要使一个整型变量可以存储一个null值,可以如下声明: int? myNullableInt = 1; 这两个变量看起来似乎是一样的。但事实并非如此。实际上,Nullable类型是一个结构体,它有两个公开可读字段:HasValue和Value。HasValue是一个布尔值,当有值存储时它为真,当变量值为null时HasValue为假。当HavValue为真是时,可以取得变量的值;为假时,当尝试取得变量的值时会抛出一个异常。 现在null是C#的一个关键字,它可以被赋给一个Nullable型变量。下面是对Nullable型变量赋值的两种有效方式。 double? myDouble = 3.14159; double? myOtherDouble = null; 可以看到,myDouble被赋给一个值,它也可以被赋以null。在第二个语句中,myOtherDouble被初始化为null——在一个非Nullable型变量中这样做会产生异常。 使用nullable类型 int? nFirst = null; nFirst = Second; // 可以 nFirst = null; // 可以 if (nFirst.HasValue) Second = nFirst; 如上所示,如果nFirst 含有一个值,这个赋值语句就会运行;否则,就会跳过。 在Nullable值中使用操作符:Lifed Operators【1】 int ValA = 10; int? ValC = ValA * ValB; //ValC==30 int ValA = 10; int? ValC = ValA * ValB; //ValC==null int ValA = 10; int? ValC = ValA + ValB; //ValC仍然是null; int ValA = 10; int ValC = ValA * ValB; // ValC 不是Nullable类型 上面这段代码会抛出一个异常。ValA * ValB的结果是null,它不能被赋给一个非Nullable变量ValC。因为,会产生异常。 关系运算 int abc = 123; int? def = null; Comparison Result abc == uvw // true 在其它关系运算中,如果其中一个或两个操作数为null,则结果一定是false。如下面示例代码(仍然使用上面定义的变量): Comparison Result abc > uvw // false, they are equal 移除空值 注:returnValue可以是Nullable类型也可以是非Nullable类型。 如果要将一个Nullable变量的值赋给一个非Nullable变量,可以用下面方法: int NewVarA = ValA ?? -1; 后记:这几天开始学习.NET2.0和C#2.0技术,在Codeguru上面看到这篇文章,本来想把它翻译出来再post到这里,不过翻译了一半就发现有很多专业术语虽然我可以理解它的意思,它却不能用中文正确表达出来,所以就放弃了翻译全文的想法,只是按照自己的理解把文章的意思写出来。有兴趣的朋友可以去看英文原文,其实我发现看英文更加容易理解。 Reference:
[1]Lifed Operators为原文词汇,参考:http://www.codeguru.com/Csharp/.NET/net_data/datagrid/article.php/c10393 |
请发表评论