当前位置:网站首页>C# ?,?.,?? .....
C# ?,?.,?? .....
2022-07-07 23:11:00 【有诗亦有远方】
转载自这里
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为null,则表达式返回null;否则返回数组访问结果。
6.??=
仅当左操作数计算为 null 时,才能使用运算符 ??= 将其右操作数的值分配给左操作数。 这个还挺好使的
边栏推荐
- 3 years of experience, can't you get 20K for the interview and test post? Such a hole?
- "An excellent programmer is worth five ordinary programmers", and the gap lies in these seven key points
- What has happened from server to cloud hosting?
- 第四期SFO销毁,Starfish OS如何对SFO价值赋能?
- 接口测试要测试什么?
- 新库上线 | CnOpenData中国星级酒店数据
- Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades(KDD20)
- 手机上炒股安全么?
- Introduction to paddle - using lenet to realize image classification method I in MNIST
- Marubeni official website applet configuration tutorial is coming (with detailed steps)
猜你喜欢
Cause analysis and solution of too laggy page of [test interview questions]
DNS series (I): why does the updated DNS record not take effect?
letcode43:字符串相乘
Jouer sonar
What if the testing process is not perfect and the development is not active?
An error is reported during the process of setting up ADG. Rman-03009 ora-03113
5g NR system messages
玩轉Sonar
[go record] start go language from scratch -- make an oscilloscope with go language (I) go language foundation
C # generics and performance comparison
随机推荐
【愚公系列】2022年7月 Go教学课程 006-自动推导类型和输入输出
13. Enregistrement et chargement des modèles
Stock account opening is free of charge. Is it safe to open an account on your mobile phone
NVIDIA Jetson测试安装yolox过程记录
Basic mode of service mesh
ReentrantLock 公平锁源码 第0篇
3 years of experience, can't you get 20K for the interview and test post? Such a hole?
NTT template for Tourism
Qt不同类之间建立信号槽,并传递参数
Service mesh introduction, istio overview
新库上线 | 中国记者信息数据
Binder core API
9. Introduction to convolutional neural network
14.绘制网络模型结构
The weight of the product page of the second level classification is low. What if it is not included?
1293_FreeRTOS中xTaskResumeAll()接口的实现分析
[Yugong series] go teaching course 006 in July 2022 - automatic derivation of types and input and output
Prediction of the victory or defeat of the League of heroes -- simple KFC Colonel
QT establish signal slots between different classes and transfer parameters
Course of causality, taught by Jonas Peters, University of Copenhagen