1.可空类型修饰符(?)

  众所周知,在C#中引用类型可以使用一个null引用来表示一个不存在的值,比如 string str = null 是正确的;

但是值类型却不能为空,比如 int k = null 那么编译器就会报错;

为了让值类型也可以为空,就需要使用可空类型,即用可空类型修饰符 "?" 来表示,举例如:

int? 表示可空的整形,DateTime? 表示可为空的时间。这样我们就可以写int? k = null 而不报错。

  它的表现形式为 "T?" ,T? 其实是System.Nullable(泛型结构)的缩写形式,

也就意味着当你用到T?时编译器编译时会把T?编译成System.Nullable的形式。

例如:int?,编译后便是System.Nullable的形式。

2.NULL检查运算符(?.)

  ?. 可以作为是否为NULL的检查运算符。让我们举个例子:

现在要获取某点的X值,那么我们就需要判断该点是否为空,代码可以写成:

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。

3.空合并运算符(??)

  用于定义可空类型和引用类型的默认值。

如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。例如:

a??b 当a为null时则返回b,a不为null时则返回a本身。

空合并运算符为右结合运算符,即操作时从右向左进行组合的。

如,“a??b??c”的形式按“a??(b??c)”计算。

4.三元(运算符)表达式(?: )

例如:x == 0 ? y : z 表示如果表达式 x == 0 为true,则返回y;

如果 x == 0 为false,则返回 z,是省略 if{} else{} 的简单形式。

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

学无止境,积少成多,与看到的你共勉。

C#中?.、??、?:、及?等符号用途的更多相关文章

  1. 嵌入式C语言自我修养 09:链接过程中的强符号和弱符号

    9.1 属性声明:weak GNU C 通过 __atttribute__ 声明weak属性,可以将一个强符号转换为弱符号. 使用方法如下. void __attribute__((weak)) fu ...

  2. Linux Shell中的特殊符号和含义简明总结(包含了绝大部份)

    case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下: case $变量名 in 模式1) 命令序列1 ;; 模式2) 命令序列2        ;; *) 默认执行的命令序列  ...

  3. XML中输入特殊符号

    XML中输入特殊符号 周银辉 特殊符号比如 ™, 要在xml中使用的话, 其实和html的转码是一样的, 参考下面这个表(使用十进制编码那一列) 特殊符号 命名实体 十进制编码 特殊符号 命名实体 十 ...

  4. XAML中的特殊符号几空白字符处理

    阅读目录 介绍 详细 处理 Demo下载 介绍 XAML标记语言是基于xml的,所以很多xml中的特殊符号在XAML也是需要处理的. 详细 (取自msdn) 字符 Entity 注释 &(“a ...

  5. MyBatis中的特殊符号[20160713]

    今天中午回到工位已经是12:20多了,没有时间睡觉了,本想着还能提前开始,结果看了点新闻之后,又是12:40了,所以新闻坚决不能看,执行力. 今天主要记录一下MyBatis中的特殊符号的问题,这个问题 ...

  6. sql语句中的注释符号

    sql语句中的注释符号     mysql # 到该行结束.-- 到该行结束 以及 的注释方格:mysql> SELECT 1+1;     # 这个注释直到该行结束mysql> SELE ...

  7. C#中Config文件中,特殊符号的书写方法。

    App.config: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <configuration& ...

  8. html中的特殊符号

    html中的特殊符号 符号 说明 编码   符号 说明 编码   符号 说明 编码 " 双引号 " × 乘号 × ← 向左箭头 ← & AND符号 & ÷ 除号 ÷ ...

  9. GNU C/C++ __attributes__ GCC中的弱符号与强符号

    最近在看一些源代码,遇到了一些使用__attribute__修饰函数和变量的属性方面的代码,不是太了解,很是汗颜,再此做个总结:   GCC使用__attribute__关键字来描述函数,变量和数据类 ...

  10. SSH框架应用中常用Jar包用途介绍

    struts2需要的几个jar包:1)xwork-core-2.1.62)struts2-core-2.1.83)ognl-2.7.34)freemarker-2.3.155)commons-io-1 ...

随机推荐

  1. Android Studio自强迫升级到4.2版本后调试Native项目时总是卡死问题

    原文地址:https://www.zhaimaojun.top/Note/5464968 就在昨天,也就是2021年5月6号,Android Studio强迫用户升级到4.2版本, 原因就是jcent ...

  2. Golang、python中MD5、SHA512、base64编码等

    在GO中处理的话,比较方便. func main() { fmt.Println(md5Str("woGo")) fmt.Println(sha512Str("woGo& ...

  3. MindSpore反向传播配置关键字参数

    技术背景 在MindSpore深度学习框架中,我们可以向construct函数传输必备参数或者关键字参数,这跟普通的Python函数没有什么区别.但是对于MindSpore中的自定义反向传播bprop ...

  4. 传入一个List集合,返回分页好的数据

    传入一个List集合,返回分页好的数据. 定义分页信息类: package com.cn.common; import java.util.List; public class CommonPage& ...

  5. SQL如何删除所有字段都相同的重复数据?

    SQL Server数据库:有时候在处理数据时会遇到不加主键的表,导致数据表内出现了一模一样的数据,刚开始第一时间想到的方式是,把两条数据全部删除,然后再插入一条,但是这种可能数据量比较少的话,还可以 ...

  6. 洛谷P3543 [POI2012] WYR-Leveling Ground

    题目描述 给定 \(n\) 个数和 \(a,b\) 每次可以选择一段区间 \(+a,-a,+b ,或 -b\),问最少操作几次能把它们都变成 \(0\).如果无解请输出 \(-1\). 样例输入 5 ...

  7. JSON数据压缩传输(一)- 无标记数组

    服务端 //需要传回前端的字段string[] fields = dto.fields.Split(','); var resluts=new List<dynamic>(); //只取前 ...

  8. linux下RPM工具的使用:RPM安装/查询/查看/卸载/升级软件包

    目录 一.关于软件包 二.RPM软件包 三.RPM包通用的命名规则 四.RPM工具的使用 4.1 rpm安装软件的功能 4.2 rpm查询的功能 4.3 rpm查看软件包内容是否被修改 4.4 rpm ...

  9. rocketMQ 文章

    10 DefaultMQPushConsumer 使用示例与注意事项.md (lianglianglee.com) 手动回滚事务: (29条消息) spring 控制事务回滚重要知识点:Transac ...

  10. MyBatis抛出BindingException异常可能是你忘了配置资源拷贝

    最近博主在搭建Mybatis项目时遇到了一问题,在一切配置妥当后,开始运行测试代码,但是此时控制台无情的抛出了异常: 开始寻找问题根源 咦?难道是我哪里写错,我的第一反应是我的xml配置文件哪里写错了 ...