c# 运算符 ? ??
2021-06-28 19:07
标签:[] 数组 处理 需要 第一个 ring 判断 访问 tostring c# 运算符 ? ?? 标签:[] 数组 处理 需要 第一个 ring 判断 访问 tostring 原文地址:https://www.cnblogs.com/alplf123/p/10033550.html static void Main(string[] args)
{
//空合并行运算??
/*?? 提供了一种快捷方式,可以在处理可空类型和引用类型时表示null值的可能性,这个运算符放在
两个操作数之间,第一个操作数必须是一个可空类型或者引用类型,第二个操作数必须与第一个操作数
类型相同,或者可以隐式转换为第一个操作数的类型
1、如果第一个操作数不是null,整个表达式就等于第一个操作数的值;
2、如果第一个操作数是null, 整个表达式就等于第二个操作数的值
*/
int? a = null;
int b;
b = a ?? 10;
a = 3;
Console.WriteLine(b); // 10
b = a ?? 10;
Console.WriteLine(b); //3
//空值传播运算符 object?.method;
/*
* 生产环境中代码会检查验证变量空值条件,访问变量时需要检查判断是否为null,否则会抛出NullReferenceException, 但是有时很容易忘记这样的检查,可以利用空值传播的特性来简化代码
*/
int? d = 2;
Console.WriteLine(d?.ToString().GetType().Name); // String
d = null;
Console.WriteLine(d?.ToString().GetType().Name); // null
//当空值传播类型访问int类型的属性时,不能将结果直接分配给int,因为结果可能为null,可以将结果分配为可空的int?
//当然我们也可以结合空合并行运算符的特性??来实现
Person p = new Person();
int e = p?.Age ?? 666;
Console.WriteLine(e); //123
p = null;
e = p?.Age ?? 666;
Console.WriteLine(e); //666
//当然也可以将这种特性用于数组的可空判断
int[] arr = null;
Console.WriteLine(arr?[0]); //null
arr = new[] {1, 2, 3};
Console.WriteLine(arr?[0]); //1
Console.ReadKey();