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

? 可空运算符

? 单个问号 代表可空运算符,能够强制让一些不可为空的类型附上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;

我在写单例的时候有用到
在这里插入图片描述
其他用经常用到的地方:请添加图片描述
用来判断物体是否为空,不为null是得到物体,节约码量,提高效率,方便阅读

注意:
空合并运算符为右结合运算符,即操作时从右向左进行组合的。如,“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
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值