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. HTTP 结构概述

    Web 客户端和服务器 Web 内容都是存储在 Web 服务器上的,Web 服务器所使用的是 HTTP 协议,因此经常被称为 HTTP 服务器,HTTP 服务器存储了因特网的数据.客户端向服务器发送 ...

  2. leaflet 使用turfjs实现前端自定义插值

    Turf.js官网地址:http://turfjs.org/ Turf.js中的几何数据组织规范以WKT格式为标准.其官网中包含了详细的接口介绍和样例讲解.这里我给出我们需要用的接口: 参考地址: h ...

  3. Vue 渲染模板时怎么保留模板中的HTML 注释呢?

    在组件中将 comments 选项设置为 true ...

  4. Unity Linear Gamma色彩空间矫正测试

    Gamma和Linear修正的问题相信网上已经有很多文章了.简单来说显示器的颜色输出不是线性的,根据硬件参数和输出颜色 信息拟合曲线是x^2.2,因此会使用一个x^0.45曲线将其拟合回线性. 因为0 ...

  5. 【漏洞复现】Apache RocketMQ 代码注入漏洞(CVE-2023-37582)

    产品介绍 Apache RocketMQ是美国阿帕奇(Apache)基金会的一款轻量级的数据处理平台和消息传递引擎. 漏洞概述 Apache RocketMQ 存在代码注入漏洞,该漏洞源于当 Name ...

  6. Windows Server 2022 安装

    获取 Windows Server 2022 https://www.microsoft.com/zh-cn/evalcenter/evaluate-windows-server-2022 查看 Wi ...

  7. 如何解决 IntelliJ Idea 编译 Java 项目时,找不到包或找不到符号的问题?

    执行 Maven Reimport 描述: 重新导入 Maven 包. 操作步骤: -> 选择 Project 目录右键 -> Maven -> Reimport 执行 Invali ...

  8. go语言开发的内网穿透工具,frp.

    转载自:https://www.appinn.com/frp/ 什么是 Frp? 内网穿透工具有很多,其中 Frp (Fast Reverse Proxy) 是比较流行的一款.FRP 是一个免费开源的 ...

  9. Wpf UI框架 MaterialDesign 的使用记录

    近期公司有桌面客户端的开发需求,并且对样式和界面反馈有一定的要求,对比各种开源UI框架后确认使用MaterialDesign . 1.引入框架MaterialDesignThemes,注意下对应的版本 ...

  10. Objetive-C 属性和线程安全

    一.接上一篇<nonatomic 带来的线程安全问题>,这里继续详细讨论属性各种类型与线程安全的关系 1)影响线程安全的属性类型,nonatomic,atomic,weak @proper ...