注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Big鹏 ——学无止境

不谋万世者,不足谋一时;不谋全局者,不足谋一域

 
 
 

日志

 
 

C#”可空值类型”与”空结合操作符”  

2014-10-31 22:05:24|  分类: 小技能 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1.可空值类型

       首先,我们知道,一个值类型的变量永远不可能为null,因为它总是包含值类型的值本身。

       这在某些情况下就会成为问题,例如:设计数据库中,可将某一列的数据类型定义为一个32位整数,那么我们在程序中就理所应当将它映射到FCLInt32数据类型。而且,数据库中这列是允许值为空的,这样用.NET Framework处理数据就会出问题,因为在CLR中,没法讲一个Int32值表示为null。通俗点说,就是在.NET中无法将null赋值给一个值类型的对象,如Int  a = null;是错误的。

       再例如,在Java中,java.util.Date类是一个引用类型,所以该类型的变量可以为null;而CLR中,System.DateTime是一个值类型,所以它永远都不能为null。这样,如果用Java写得程序调用一个.NETWeb服务,且参数为时间类型时,就会出现问题,一旦Java程序发送nullCLR就不知道如何操作它,因为CLR不知道如何表示null

       为了解决这些问题,MicrosoftCLR中引入了“可空值类型“的概念。即System.Nullable<T>类,它是在FCL中定义的,如下为类的部分实现:

C”可空值类型”与”空结合操作符” - 王志鹏 - 王志鹏 廊坊师范学院信息技术提高班第九期

  现在,如果想要在代码中使用一个可空的Int32,就可以像下面这样写了:

C”可空值类型”与”空结合操作符” - 王志鹏 - 王志鹏 廊坊师范学院信息技术提高班第九期
 编译并运行上述代码,得到如下结果:

C”可空值类型”与”空结合操作符” - 王志鹏 - 王志鹏 廊坊师范学院信息技术提高班第九期

 C#提供了简洁的语法来定义可空值类型,例如:

C”可空值类型”与”空结合操作符” - 王志鹏 - 王志鹏 廊坊师范学院信息技术提高班第九期

 代码演示如下:

C”可空值类型”与”空结合操作符” - 王志鹏 - 王志鹏 廊坊师范学院信息技术提高班第九期

 2.空结合操作符

C#提供了一个所谓的“空结合操作符”,即“??”操作符,它是一个双目运算符。取两个数置于操作符两边,假如左边的操作数不为null,就返回这个操作数的值,否则,就返回右边操作数的值。利用空结合操作符可以方便地设置变量的默认值。

空结合操作符的一个妙处在于,它既能用于引用类型,也能用于可空值类型。使用如下:

C”可空值类型”与”空结合操作符” - 王志鹏 - 王志鹏 廊坊师范学院信息技术提高班第九期

  ??”操作符在功能上与?:相似,但它并不仅仅是?:的变形而已,否则也就没有存在的必要了。实际上,??提供了重大的语法上的改进:

?  一是,它能更好的支持表达式,如:

C”可空值类型”与”空结合操作符” - 王志鹏 - 王志鹏 廊坊师范学院信息技术提高班第九期

 

?  二是,??它在复合情形中最好用,如:

C”可空值类型”与”空结合操作符” - 王志鹏 - 王志鹏 廊坊师范学院信息技术提高班第九期

 3.总结

       可空值类型是,.NET为了使值类型的对象可以接受null而存在;空结合操作符“??”与我们熟悉的“?:”操作符的功能大体相似,此外还有>能更好的支持表达式,以及>非常便于在复合情形中使用等优势。

  评论这张
 
阅读(219)| 评论(7)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017