1. 可空类型修饰符(?)
引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。 
例如:string str=null; 是正确的,int i=null; 编译器就会报错。 
为了使值类型也可为空,就可以使用可空类型,即用可空类型修饰符"?"来表示,表现形式为"T?" 
例如:int? 表示可空的整形,DateTime? 表示可为空的时间。 
T? 其实是System.Nullable(泛型结构)的缩写形式,
也就意味着当你用到T?时编译器编译时会把T?编译成System.Nullable的形式。 
例如:int?,编译后便是System.Nullable的形式。

int? a = null;
  
2. 三元(运算符)表达式(?:)
 例如:x?y:z 表示如果表达式x为true,则返回y;
如果x为false,则返回z,是省略if{}else{}的简单形式。

3. 空合并运算符(??)
用于定义可空类型和引用类型的默认值。
如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。
例如:a??b 当a为null时则返回b,a不为null时则返回a本身。 
空合并运算符为右结合运算符,即操作时从右向左进行组合的。
如,“a??b??c”的形式按“a??(b??c)”计算。

4.NULL检查运算符(?.) 
  例如我们要获取一个Point序列的第一个点的X坐标,第一感觉会这么写:

int firstX = points.First().X;

  但是,老鸟会告诉你,这儿没有进行NULL检查,正确的版本是这样的:

int? firstX = null;    
   if (points != null)     
   {  
    var first = points.FirstOrDefault();   
     if (first != null)        
     firstX = first.X;   
   } 
  正确倒是正确了,代码取变得难读多了。在C# 6.0中,引入了一个 ?. 的运算符,前面的代码可以改成如下形式:

int? firstX = points?.FirstOrDefault()?.X;

  从这个例子中我们也可以看出它的基本用法:如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL

  需要注意的是,由于"?."运算符返回的可以是NULL,当返回的成员类型是struct类型的时候,"?."和"."运算符的返回值类型是不一样的。

Point p = new Point(3, 2);

   Console.WriteLine(p.X.GetType() == typeof(int));        //true

  Console.WriteLine(p?.X.GetType() == typeof(int?));        //true

5"?[]"运算符:

int? first = customers?[0].Orders.Count();

(这个不太清楚,感觉微软语法糖用过头了。)

本质:都使用了语法糖,在编译阶段编译器会把特殊符号先转译成原始状态再编译。

6.“:”运算符

当函数又多个参数时,经常记不清各个形参的顺序,则可以用形参:实参的语法指定 形参与实参的对应。例如:check(a:100..); 定义为:bool check(int a,....){...},表示参数a 传入100

C#中 ??、 ?、 ?: 、?.、?[ ]、:相关推荐

  1. GNU Make 使用手册(于凤昌中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...

  2. 面试:第十二章:所有总结

    Java基础 java基本类型哪些,所占字节 byte :1个字节 short :2个字节 char :2个字节 int :4个字节 long :8个字节 float :4个字节 double :8个 ...

  3. linux内核分析(转自某位大哥网上的笔记)

    启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码.BIOS先进行一系列的系统自检,然后初始化位于地址0的中断 ...

  4. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  5. 总结一下在使用某里云服务器的过程中出现过的一些问题

    此文总结在使用阿里云的过程中出现过的问题   想起来就记录一下 本人为言行负责! 海内选择腾讯华为,共勉! k8s不同命名空间的配置文件串掉了 k8s集群服务器购买上后,无法使用外网.连续购买了4台然 ...

  6. Kubernetes 中 设置pod不部署在同一台节点上

    在k8s中,节点的调度主要由亲和性和污点来进行控制的.   而在亲和性部分由分为了节点亲和性和节点反亲和性.   节点亲和性是指在pod部署时,尽量(软策略)或者必须满足(硬策略)部署在某些节点上. ...

  7. 在Dockerfile中设置G1垃圾回收器参数

    在Dockerfile中设置G1垃圾回收器参数 ENV JAVA_OPTS="\ -server \ -XX:SurvivorRatio=8 \ -XX:+DisableExplicitGC ...

  8. 在kotlin companion object中读取Bean,注入Bean对象

    在kotlin companion object中读取Bean,注入Bean对象 在使用kotlin时,或多或少地会使用到一些公共组件,如 http. mongo. redis相关的组件.   使用组 ...

  9. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  10. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法

    数据库中自定义排序 场景:有一张banner表,表中有一个status字段,有0, 1, 2三个状态位,我想要 1,0,2的自定义排序(这里是重点),然后再进行之上对sequence字段进行二次排序( ...

最新文章

  1. python解码函数_python2和python3的编码encode解码decode函数
  2. arcgis andin使用python窗体_在ArcGIS?10中使用python
  3. 可以不封神,但是不能不修炼——亚特兰蒂斯之神特斯拉的启示
  4. Excel制作带勾的方框
  5. MyBatis Generator 学习
  6. 打包指令_DD19A电动热熔打包机,更换易损件方法
  7. cobbler的dhcp服务_Cobbler服务器安装部署
  8. 人在斯坦福,刚上CS224n
  9. nginx 413 Request Entity Too Large
  10. 移位运算符<< >>
  11. constraintlayout布局新特性_进阶ConstraintLayout-2.0新特性
  12. matlab非线性规划
  13. C++for循环经典九九乘法表打印
  14. Python初学系列——天天向上的力量
  15. c语言中max的用法。
  16. 22-Consent 确认逻辑实现
  17. IEEE调研报告:父母关于人工智能对儿童的影响的看法
  18. Linux kernel panic 问题解决方案
  19. Python 淘宝商品价格爬取(requests库+正则表达式)
  20. java运行时跟编译时的区别,欢迎大家指正

热门文章

  1. Flyweight Design Pattern 共享元设计模式
  2. python 爬虫002-http与urllib2
  3. 转为win64后, MS的lib问题
  4. erlang OTP中的四大behaviour fsm的例子
  5. Winodws live writer
  6. strlwr,strupr函数
  7. 【数据结构与算法】【算法思想】位图
  8. java 继承调用_【JAVA学习】继承中函数调用机制
  9. 1到n阶乘算法的改进
  10. 街上第一台电子计算机是,南京信息工程大学滨江学院2009级《计算机基础》(文科)a试卷(含答案)【最新】.doc...