当前位置: 首页 > news >正文

C#中包含?的运算符使用汇总

总目录


文章目录

  • 总目录
  • 前言
  • 一、使用概述
  • 二、使用说明
    • 1.可空类型修饰符
    • 2.三目运算符
    • 3.空合并运算符
    • 4.NULL 检查运算符
  • 结语


前言

本文将含有?运算符的各种使用进行汇总,方便系统性记忆和知识回顾。


一、使用概述

用法描述
?可空类型修饰符
?:三目运算符
??空合并运算符
?.Null检查运算符

二、使用说明

1.可空类型修饰符

正常情况下我们可以将引用类型赋值为null,但是不可以将值类型赋值为null。

代码如下(示例):

string str = null;//可以
int inum = null;//不可以,编译器报错

但是如果我们使用?可空类型修饰符,则可以实现如下效果:

string str = null;//可以
int? inum = null;//可以,编译器不会报错

用可空类型修饰符 ? 来修饰,则值类型也可为空。
T? 其实是 System.Nullable(泛型结构)的缩写形式,也就意味着当你用到 T?时编译器编译时会把T?编译成 System.Nullable 的形式。

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

2.三目运算符

x?y:z 表示如果表达式 x 为 true,则返回 y;如果 x 为 false,则返回 z,是 if{}else{} 的简单形式。

代码如下(示例):

        static void Main(string[] args){int a=11; int b=22;int c = a > b ? a : b;Console.WriteLine($"c={c}");Console.ReadLine();//结果: c=22}

3.空合并运算符

用于定义可空类型和引用类型的默认值。
如果此运算符的左操作数不为 null,则此运算符将返回左操作数,否则返回右操作数。

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

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

如: a??b??c 的形式按 a??(b??c) 计算。

代码如下(示例):

        static void Main(string[] args){string aStr = "aStr";string bStr = null;string cStr = aStr ?? bStr;string dStr = bStr ?? aStr;Console.WriteLine($"cStr={cStr},dStr={dStr}");Console.ReadLine();//结果   cStr=aStr,dStr=aStr//?? 更多还是用于一些类或者对象的默认值定义}

另外?? 可以理解为三元运算符的简化形式:

string cStr = aStr ?? bStr;
//效果等同于
string cStr = (aStr==null) ? bStr:aStr;

4.NULL 检查运算符

检查运算符左边的对象是否为null,如果为null,则不会进行右边的运算,直接返回null。

代码如下(示例):

    //表示获取用户的id信息//这里用了?. 表示检查UserInfo是否为nullstring id=UserInfo?.Id;

结语

以上就是本文的内容,希望以上内容可以帮助到您,如文中有不对之处,还请批评指正。


参考资料:C#运算符

http://www.lryc.cn/news/34413.html

相关文章:

  • 剑指 Offer 56 - I. 数组中数字出现的次数
  • MySQL事务日志
  • 极速开发,无限可能,2023网易低代码大赛全新赛季启动
  • C++ | 详细介绍缺省参数的作用
  • 【sdx62】sdx62分析代码中Serial Number的寄存器地址及获取Serial Number的方法
  • MATLAB的快速入门
  • Python中赋值、引用、深浅拷贝的区别和联系
  • 春招冲刺(十一):前端面试之网络总结
  • Mybatis插件
  • 计算机学科专业基础综合科目(408)
  • centos7安装教程
  • Kafka 重平衡
  • PTA:L1-022 奇偶分家、L1-023 输出GPLT、L1-024 后天(C++)
  • IDEA插件开发入门.02
  • 如何用 23 种编程语言说“Hello World”
  • 【Linux快速入门】文件目录操作
  • 字体反爬慢慢总结破解方式
  • Kafka 位移提交
  • kubernetes--监控容器运行时:Falco
  • HTTP协议详解(上)
  • java性能-原生内存-内存分析
  • c++类与对象
  • Java并发编程与API详解
  • 【冲刺蓝桥杯的最后30天】day5
  • 大厂与小厂招人的区别,看完多少有点不敢相信
  • 前端ES5对象特性
  • Linux入门介绍及Linux文件与目录结构
  • 超赞,用python实现流媒体服务器功能,寥寥几句搞定。
  • 冥想第七百二十一天
  • 06-Oracle表空间与用户管理