C# 可空类型 Nullable 可空? 空合并?? 空检查?.

C# 可空类型

https://www.w3cschool.cn/csharp/csharp-nullable.html
https://www.runoob.com/csharp/csharp-nullable.html

1、C# 可空类型(Nullable)

(1)    Nullable 类型(可空类型)是C# 中一个特殊的数据类型,可空类型表示其基础值类型正常范围内的值,再加上一个 null 值。
例如:Nullable< Int32 >,读作"可空的 Int32",可以被赋值为 -2,147,483,648 到 2,147,483,647 之间的任意值,也可以被赋值为 null 值。
类似的,Nullable< bool > 变量可以被赋值为 true 或 false 或 null。
(2)    应用场景:在处理数据库和其他包含可能未赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型的功能特别有用。例如,数据库中的布尔型字段可以存储值 true 或 false,或者,该字段也可以未定义。    

2、C# 可空类型运算符(?) 、 空合并运算符(??)、空检查运算符(?.)

(1)    单问号?  可空类型运算符
( ? ) : 单问号用于将不可为空的值类型申明为可空类型,如 int,double,bool 等类型,然后就可以用 null 赋值。实际上T? 是System.Nullable<T>的缩写形式,编译时编译器会把T?翻译成System.Nullable<T>的形式。

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

int? i = 3 
//等同于
Nullable<int> i = new Nullable<int>(3);

int i;   //默认值0
int? ii; //默认值null,int?实际是Nullable<int>,是类类型,所以默认值是null


(2)    双问号??  空合并运算符
01.    ( ?? )称为:Null 合并运算符。
02.    作用:当一个变量为 null 时,返回一个默认值。

valNew = val ?? 999; // val不为null则返回val,否则返回999
//等价于
valNew = val != null ? val : 999;

03.    空合并运算符为右结合运算符,即操作时从右向左进行。
         如:“a??b??c” 按 “a??(b??c)” 顺序计算。

 

(3)    ?.  空检查运算符
01.    ( ?. )称为:空检查运算符。
02.    作用:如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL。就是在取成员运算符(.)上加入空判断(?)。
03.    例如:

          要获取一个Point序列的第一个点的X坐标,第一感觉会这么写:int firstX = points.First().X;
          但是,此处有点问题,没有进行NULL检查,正确的版本是这样的:

int firstX = 0;
if (points != null)
{
  var first = points.FirstOrDefault();
  if (first != null)
      firstX = first.X;
}

         以上代码倒是正确了,但代码取变得复杂多了。使用 ?. 的运算符,前面的代码可以改成如下形式:

int? firstX = points?.FirstOrDefault()?.X;  // 此处返回的是可空的类型

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值