首页 > 编程语言 >【C#】- ??、 ?、 ?: 、?.、?[ ] 问号的各种用法

【C#】- ??、 ?、 ?: 、?.、?[ ] 问号的各种用法

时间:2023-05-26 13:13:34浏览次数:36  
标签:返回 C# 用法 运算符 int 可空 类型 null 问号

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

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();
检查customers集合是否为空再执行后续语法

int?表示为可以范围一个null的int 类型

标签:返回,C#,用法,运算符,int,可空,类型,null,问号
From: https://www.cnblogs.com/VisionCodeBlog/p/17434439.html

相关文章

  • Rust async 编程
    Rustasync编程AsynchronousProgramminginRust:https://rust-lang.github.io/async-book/中文书名《Rust异步编程指南》:https://github.com/rustlang-cn/async-bookRust语言圣经(RustCourse):https://course.rs/advance/async/getting-started.html一、GettingStarted1.......
  • 如何避免Salesforce Apex代码中5个常见错误,提升开发技巧?
    编码是一门需要严谨和谨慎的技术,即使是有经验的开发人员也会犯错。一些最常见的编程错误,可能会导致严重的后果。因此,作为一名开发人员,了解并避免这些错误是非常重要的。本篇文章将为学习者介绍在编写Apex代码时一定要规避的5个错误。易错点1缺乏学习编程语言的能力学习编码时......
  • 算法学习记录(模拟枚举贪心题单):四舍五入(未AC)
    题目链接https://ac.nowcoder.com/acm/contest/20960/1004题目分析注意当第i位为9是,此时进位就是0,但是0<5,所以就不能再用i+1进行判断了。所以对于这种情况可以再添加一个其他变量。未AC代码//主要解决问题,因为使用i+1去判断是否要进位的//逢9进位后就会变成0,那么第i+1位......
  • Hackathon 代码黑客马拉松采访复盘
    AIGCHackathon2023北京站我参加了选手采访提纲,这里我感觉有些点可以分享给大家。之前复盘的链接:下面是采访我的回答内容:1.请向大家简单介绍一下自己吧?子木,社区名称为程序员泥瓦匠,年龄三十岁,毕业于温州医科大学。有8年SaaS经验,曾在有赞和售后宝等SaaS公司工作。兴......
  • 分享一个国内可用的ChatGPT网站,免费无限制,支持AI绘画 - AI 百晓生
    背景ChatGPT作为一种基于人工智能技术的自然语言处理工具,近期的热度直接沸腾......
  • 【C#】-弃元(_)的使用
    从C#7.0开始,C#支持弃元,这是一种在应用程序代码中人为取消使用的占位符变量。简单来说,弃元的作用就是告诉编译器和其他读取代码的文件你打算忽略表达式的结果。当我们不需要或不使用赋值的结果时,就可以使用弃元。我们在代码中一定遇到过这种苦恼:staticvoidMain(string[]a......
  • OnlineDictionary 倒计时体会
     电子辞典终于要结项了,这几天没命写报告,怎么会有这么多报告要写?GOD!有印象的生活是张开眼就开始写报告,画图,写到睡觉。Why theywant somanykindsofreports?真是要人命!  这次的项目,说实话,学到了很多,团队合作,互相体谅,技术学习。这些都是不可言谈的经......
  • 【MCA】Java互联网高级架构师马SB
    【MCA】Java互联网高级架构师马SBdownload:3w51xuebccomgRPC云原生微服务开发随着企业信息化建设的不断深入,以及互联网技术的快速发展,微服务架构已经成为当前比较热门的一种架构风格。而gRPC则是一种基于HTTP/2协议的高性能、低延迟的RPC框架,非常适合用于构建微服务。什么是gRPC?gR......
  • 设计师解放双手之作!3秒生成风景园林效果图,AIGC赋能景观设计
    项目简介在过去几十年,风景园林经历了从“刀耕火种”的完全手绘设计时代到当下比较流行的参数化设计时代,过去的每一轮技术革新都让风景园林作品的表现形式产生了巨大的改变。随着计算机图像技术的发展,我们有更多的建模和渲染软件辅助提升图纸表现效果,但表现效果提升的背后伴随的是越......
  • COMP612 计算机图形
    COMP612ComputerGraphicsProgrammingSemester1,2023Project:HelicopterSceneThisisanindividualassignment.Allworkyousubmitmustbeentirelyyourown.Theassignmentisworth70%andwillbemarkedoutof100.•Youmustworkfromtheprovidedanima......