C#中的 ?,??, ?. ,?[] 四个个问号运算符

news/2024/11/18 13:58:28/

? 可空运算符

? 单个问号 代表可空运算符,能够强制让一些不可为空的类型附上null
引用类型可以使用空引用表示一个不存在的值,
值类型通常不能表示为空。
比如:

   string str=null; // 正确的,int i=null; // 错误的,编译器就会报语法错误。

为了使值类型也可为空,就可以使用可空类型。即用可空类型修饰符"?“来表示,表现形式为"T?”
例如:int? 表示可空的整形,DateTime? 表示可为空的时间。
T? 其实是System.Nullable(泛型结构)的缩写形式,也就意味着当你用到T?时编译器编译 时会把T?编译成System.Nullable的形式。
例如:int?,编译后便是System.Nullable的形式。

int? i = null ; //正确的,此时不会再有语法错误

?? 空合并运算符

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

应用:

int? a=b??c;

注意:
空合并运算符为右结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(b??c)”计算。


?. null检测运算符(判空运算符)

可以跟在参数或者表达式后,不为null时才能执行后面的操作。

列如:

GameObejct?.GetComponent<Rigidbody>();

如果GameObject为null则直接返回一个null不在执行后续操作。
如果GameObject不为空则去得到Rigidbody组件。

由于GetComponent的方法是可能出现报错的,但是如果GameObject为null就可以不在继续执行。
效果等同于:

if(GameObejct != null)GameObejct.GetComponent<Rigidbody>();

?[] 数组null检查运算符

int[] num = null;
var temp = num?[1];
// temp = null

可以自动检测进行NULL检测,不过在使用时要注意数组越界问题。

int[] num = { 3, 6, 92, 8 };
var temp = num1 ?[1];
// temp = 6

http://www.ppmy.cn/news/91882.html

相关文章

Git业务实践记录

您好&#xff0c;如果喜欢我的文章&#xff0c;可以关注我的公众号「量子前端」&#xff0c;将不定期关注推送前端好文~ 场景描述 最近在开发一个新的功能&#xff0c;和往常一样先建了一个分支进行开发&#xff0c;开发到周期60%的时候&#xff0c;后端临时通知需要将大功能…

国内最佳的客服系统Tidio替代品是什么?

许多做跨境电商的企业都知道&#xff0c;Tidio是一款不错的为电子商务量身定制的全渠道客服系统支持工具&#xff0c;但还有其他同样不错的选择。 当前许多同类型产品以迎合欧美客户居多&#xff0c;中国用户使用不惯&#xff1b;免费版体验门槛高&#xff1b;只支持海外支付方…

基于C#制作一个ChatGPT桌面助手

基于C#制作一个ChatGPT桌面助手,在工作或者学习时提升自己的效率,工欲善其事,必先利其器。 一、前言1.1、什么是ChatGPT1.2、ChatGPT官网及key申请二、后台项目2.1、项目创建2.2、界面设置2.3、获取版本2.4、发送信息一、前言 1.1、什么是ChatGPT ChatGPT(全名:Chat Gene…

【算法】【算法杂谈】有序旋转数组中找到指定的数

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介…

新产品上线前需要准备哪些产品文档呢

新产品上线前需要准备的产品文档非常重要&#xff0c;不仅有助于产品的开发过程中沟通和协作&#xff0c;而且对于后期的维护和升级也起到十分重要的作用。下面详细介绍新产品上线前需要准备哪些产品文档。 一、市场需求文档 市场需求文档&#xff08;Market Requirement Doc…

数据结构中“树”的全面讲解

文章目录 一、树结构的定义与对比二、树的存储结构是什么&#xff0c;都有哪些存储结构&#xff1f;双亲表示法&#xff1a;孩子表示法&#xff1a;孩子兄弟表示法&#xff1a; 一、树结构的定义与对比 ​ 树结构是一种一对多的非线性结构&#xff0c;它是由n&#xff08;n>…

nest日志包pino、winston配置-懒人的折腾

nest日志 三种node服务端日志选型 winstonpinolog4js 2023年5月23日 看star数&#xff1a;winston > pino > log4js 使用体验&#xff1a; pino 格式简洁&#xff0c;速度快&#xff0c;支持输入日志到任意数据库&#xff0c;日志暂无自动清理&#xff08;可能是我…

使用本地的chatGLM

打开终端 wsl -d Ubuntu conda activate chatglm cd cd ChatGLM-6B python3 cli_demo.py 依次输入以上命令。