本人转载自:

http://msdn.microsoft.com/zh-cn/practices/dd391752.aspx

http://jhxk.iteye.com/blog/439888

在C# 中有个较为重要,而常被一些人忽视的符号—— 问号(? )。在这里整理一下它在C# 的几种情况:

1.     可空类型修饰符“T?” : 可空类型的基础类型可以是任何非可空值类型或任何具有struct 约束的类型参数(Nullable是.NET 2.0中新提供的一种用于标明一个值类型是否可以为空的技术。值类型后面加问号表示可为空null(Nullable 结构)),但不能是可空类型或引用类型。例如:int? 代表是可空的整形,而int?? 则是无效类型。即可空类型可以表示其基础类型的所有值和一个额外的空值。语法T? 是System.Nullable<T> 的缩写形式。可空类型具有一个HasValue 的bool 类型只读属性,当可空类型实例的该属性为true 时,则表示该实例是非空实例,包含一个已知值Value;HasValue 为false 时,访问Value 属性将导致System.InvalidOperationException 。可空类型T? 具有一个类型为T 的单个参数的公共构造函数,如new int?(123) 将获得一个值为123 的int? 类型实例。从T? 到由T 实现的任何接口都存在装箱转换,并且从由T 实现的任何接口都存在到T? 的拆箱转换。但是任何情况下可空类型都不满足接口约束,即使基础类型实现了该特定接口。

对于一个类型,如果既可以给它分配一个值,也可以给它分配空引用null(表示没有任何值),我们就说这个类型是可空的。
  因此,可空类型可表示一个值,或表示不存在任何值。例如,类似 String 的引用类型就是可空类型,而类似 Int32 的值类型不是可空类型。Nullable 结构支持将值类型扩展为可以为null,但不支持在引用类型上使用,因为引用类型本身就是可空的。
  因为值类型的容量只够表示适合于该类型的值,因此它不可为空;值类型没有表示空值所需的额外容量。

例:public int? age;

等同 Nullable<int>
  在 int 的基础上加入一个空值
  设置值的写法 Arg = 22;
  获取值的写法 Arg.Value;
  判断非空的写法 Arg.HasValue

Age是一个属性,它的值是可空的整形值。也就是说类的age成员有可能是空的,没有初始化过。使用的时候需要对Age的返回值进行判断:
if (Age.HasValue)
    i = Age.Value;
else
    i = 0;

2.     条件运算符“x ? y : z” : “x ? y : z” 的意思大部分程序员应该都熟悉,稍微啰嗦一下:) 如果表达式x 为true ,则计算y ;如果x 为false ,则计算z 。省却if{}else{} 的简单形式了。

3.     空合并运算符“??” : 该运算符是在泛型出现后,C# 词法语法中新增加的标记,同时出现的还有一个“::” (命名空间别名限定符)。形式为“a??b” 的空合并表达式要求a 为可空类型或引用类型 。如果a 为非空则表达式“a??b” 返回的结果为a ;否则返回b 。空合并运算符为 右 结合运算符 ,即操作时从右向左进行组合的。如,“a??b??c” 的形式按“a??(bb??cc)” 计算。

曾有人说过“ 细节决定胜负” ,我们程序员应该更好的把握编程语言的细节才能更好的保证软件质量。

C#中的问号的更多相关文章

  1. js正则表达式中的问号几种用法小结

    这篇文章主要介绍了js正则表达式中的问号几种用法,比如+?,*?,{2,3}?可以停止匹配的贪婪模式,感兴趣的朋友可以参考下 在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪 ...

  2. [我的疑问]String? = "Skiy Chan" 中的问号是什么意思?

    var optionalName : String? = "Skiy Chan" String? = "Skiy Chan" 中的问号是什么意思?目前还在看ap ...

  3. js正则表达式中的问号使用技巧总结

    这篇文章主要介绍了js正则表达式中的问号几种用法,比如+?,*?,{2,3}?可以停止匹配的贪婪模式等例子的解析. 在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪模式. v ...

  4. 关于微信浏览不能URL传参,URL中的问号被删除

    关于微信浏览不能URL传参,URL中的问号被删除. 尼玛难道没有人遇到过这个问题?看了微信支付SDK3.0的代码,看到urlencode 看到了几次.实际上 在微信浏览器下 header('locat ...

  5. SQL 引号中的问号在PrepareStatement 中不被看作是占位符

    SQL 引号中的问号在PrepareStatement 中不被看作是占位符. 如:SELECT P.NAME, S.YEAR, S.QUANTITY FROM SALES S LEFT JOIN PR ...

  6. C#中双问号、双冒号等几个特殊关键字

    1.@ 这个东东看似和邮件有关啊,但是在C#的世界里,可跟邮件没有一毛钱关系,它是string的女朋友(当然了string有N多女友),二者结合就可以发挥作用了.你可以给它起个名字,叫做“逐字字符串” ...

  7. Swift中的问号?和感叹号!

    Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化.如果在使用变量之前不进行初始化就会报错: var ...

  8. C#语法中一个问号(?)和两个问号(??)的运算符是什么意思?

    (1).C#语法中一个个问号(?)的运算符是指:可以为 null 的类型. MSDN上面的解释: 在处理数据库和其他包含不可赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型以及日期类型的功 ...

  9. C#中一个问号和两个问号(a ?? b)的作用

    不卖关子,直接开门见山: C#中两个问号的作用是判断??左边的对象是否为null,如果不为null则使用??左边的对象,如果为null则使用??右边的对象. 比如:a = b ?? c,如果b为nul ...

随机推荐

  1. 块状元素(div)与内联元素(span)

    <pre class="html" name="code"><html xmlns="http://www.w3.org/1999/ ...

  2. Leetcode3:Longest Substring Without Repeating Characters@Python

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  3. ARCGIS多种影像裁剪

    在互联网上下载的遥感影像都进行过分幅处理,下载下来的影像多是规则的四方形,而在进行遥感影像研究时,多是针对特定区域来进行,比如研究北京市的遥感影像,不在北京市范围内的影像对于研究者就没有利用意义,如果 ...

  4. 第六百一十二、三、四、五天 how can I 坚持

    上火了啊..已经2017了,真快,人生只是一瞬间,到头来都是一场空. 2016年最后一天,很悲催,没赶上火车.还不能改签,哪能哪次都这么幸运,长记性了,下午到济南,看了看弟弟的房子,到挺不错,就是装修 ...

  5. 第六百零九天 how can I 坚持

    好失败啊,搞了一天,竟然连个环境都没搞好,也是醉了.还是太渣了. 洗澡,睡觉.

  6. HTTP权威协议笔记-4.连接管理

    4.1 TCP连接 TCP为HTTP提供了一条可靠的比特传输管道,按顺序正确的传输,步骤如下: 浏览器解析主机名. 查询这个主机名的IP地址(DNS) 获得端口号. 浏览器对服务器该端口号发起连接. ...

  7. ---Shell的数组遍历

    1.  一一读入:  read -a A < <(echo a b c d e f g) 2. 遍历输出

  8. iOS图片加载到内存中占用内存情况

    我的测试结果: 图片占用内存   图片尺寸           .png文件大小 1MB              512*512          316KB 4MB              10 ...

  9. win8 VB6打开提示MSCOMCTL.ocx未注册

    从xp上复制相应的文件到win8相应的位置,如果是不可以,win8中反注册此控件,再注册此控件

  10. Python 多线程 Condition 的使用

    Condition Condition(条件变量)通常与一个锁关联.需要在多个Contidion中共享一个锁时,可以传递一个Lock/RLock实例给构造方法,否则它将自己生成一个RLock实例. 可 ...