博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#2.0终于有了?:便捷判断的单分支版
阅读量:6239 次
发布时间:2019-06-22

本文共 1451 字,大约阅读时间需要 4 分钟。

  C#2.0实现的Nullable数据类型,虽然说只是一个小小的cookie,但不得不说是C#矢志不渝的延续了它人性化的特点,我们终于不用再使用object来存放简单数据来通过==null测试。从表面上看这个功能或许并无太大的创新意义,但不知你是否也和我一样在记忆里埋有对类似int a=null;通不过编译时的抱怨?
    关于Nullable的详细介绍可以参考 的新特新和很多的blog文章,这不是我主要想说的内容。只是2.0为了让Nullable类型和non-Nullable数据之间转换,提供了一个新的操作符"??"比较有意思。这个操作符的作用很简单,用法如下:
None.gif 
int? a = 1 ;
None.gif 
int? b = 
null ;
None.gif 
int c = a; 
//
 compile error :(
None.gif 
int c = a ?? 100; 
//
 right
None.gif 
int d = a + b; 
//
 compile error yet
None.gif 
int d = a + b ?? -1; 
//
 right
    看到这个"??"的使用,你第一时间能想到什么呢?我第一时间就想到了
三元操作运算
? :
    在代码中书写一定的三元运算表达式,很多时候能给我们的代码带来简洁性和紧凑感。不过任何东西都会美中不足,这个经典的三元操作必须有两个分支(嗯,如果一个分支就不是三元了
emembarrassed.gif),所以我有时不得不为了不使用if语句,而写下一些自感丑陋蹩脚代码:
    1.
None.gif
string param = Request.Params["param" ];
None.gif
if ( param == 
null  )
ExpandedBlockStart.gif
ContractedBlock.gif
dot.gif {
InBlock.gif    param = defaultValue;
ExpandedBlockEnd.gif}
None.gif
    或
None.gif
string param = Request.Params["param"] == 
null ? defaultValue : Request.Params["param"];
    我是比较反感把类似Request.Params["key"]
、ViewState["key"]以及Hasttable["key"]这类的相同代码写超过一遍的,因为作为key的literal string不能被编译器检查,出现拼写错误后是非常让人抓狂的。
    2.
None.gif
public 
string  GetValue
ExpandedBlockStart.gif
ContractedBlock.gif
dot.gif {
InBlock.gif    
get
ExpandedSubBlockStart.gif
ContractedSubBlock.gif    
dot.gif {
InBlock.gif        
if ( 
this.value == 
null  )
ExpandedSubBlockStart.gif
ContractedSubBlock.gif        
dot.gif {
InBlock.gif            
return 
string .Empty;
ExpandedSubBlockEnd.gif        }
InBlock.gif        
else
ExpandedSubBlockStart.gif
ContractedSubBlock.gif        
dot.gif {
InBlock.gif            
return 
this .value;
ExpandedSubBlockEnd.gif        }
ExpandedSubBlockEnd.gif    }
ExpandedBlockEnd.gif}
    或
None.gif
public 
string  GetValue
ExpandedBlockStart.gif
ContractedBlock.gif
dot.gif {
InBlock.gif    
get
ExpandedSubBlockStart.gif
ContractedSubBlock.gif    
dot.gif {
InBlock.gif        
return 
this.value == 
null ? 
string.Empty : 
this .value;
ExpandedSubBlockEnd.gif    }
ExpandedBlockEnd.gif}
    使用?:后貌似不错了,但似乎还不是我们希望的终极无间...
    在C#2.0中,借助"??"运算符,这类代码将变得非常sexy
tongue_smile.gif
 1.  string 
params = Reqeust.Params["param"] ?? defaultValue;
 2.  public 
string GetValue { 
get { 
return 
this.value ?? 
string.Empty; } }
 3.  bool isInternal = this.Session["IsInternal"] as bool? ?? false;

本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

你可能感兴趣的文章
nagios部署
查看>>
CentOS 内核升级步骤和方法
查看>>
俄罗斯方块,算法简单 注释详细,大家运行玩玩
查看>>
centos6.5 iptables 配置
查看>>
tuxera NTFS 2016支持macOS 10.12 Sierra
查看>>
ftpclient 上传下载文件
查看>>
JQuery 获取touchstart,touchmove,touchend 坐标
查看>>
exp/imp远程操作数据库
查看>>
安全狗云备份 数据库、网站备份好帮手
查看>>
《Linux 内核分析》课程作业(1)——计算机基本原理和汇编基础
查看>>
ORACLE 近期执行的sql
查看>>
WAS集群安装<六>错误解答及概念术语
查看>>
编写GO的WEB开发框架 (九): Dao和Service
查看>>
【js】call,apply的区别
查看>>
node.js 基于socket.io的聊天室
查看>>
使用jQuery和ajax代替iframe
查看>>
Keepalived + nginx实现高可用性和负载均衡
查看>>
Git整理
查看>>
12 个 CSS 高级技巧汇总
查看>>
Hibernate中 Restrictions.or()和Restrictions.disjunction()区别
查看>>