C#温故知新(2)---问号的那些事儿??

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wucdsg/article/details/78966191

1.引言

无意中看到别人一行代码“a=a??-1”,问了一下度娘,才发现原来是这么个意思,于是总结了一下?在C#的用处,主要包含三个方面:三目运算符,可空值类型,null值合并运算符。文中若有纰漏或者错误,请留言指出,不必客气。

2.三目运算符(?:)

表达式?值B:值C;
三目运算中的?大概是我们最先接触的,?与:一起使用,若表达式为true则整个运算取结果值B,否则取值C,看看小面的一段代码:

//三木运算符
dynamic exObj = new ExpandoObject();
exObj.Name = "三木运算符";
exObj.Gender = false;
Console.WriteLine(string.Format("{0},性别:{1}", exObj.Name, exObj.Gender ? "男" : "女"));

这里写图片描述

3.可空值类型

【ValueType? Name】 等价于【System.Nullable< T >】

int? age = null;
Console.WriteLine(age.HasValue);
Console.WriteLine(age.GetValueOrDefault());
Console.WriteLine(age.GetValueOrDefault() == null);
Console.WriteLine(age == null);

这里写图片描述

(1)值类型后面紧跟?(int? a=null)后可以给值类型变量赋空值
(2)写法是System.Nullable< T >的简写(语法糖)
(3)判空,HasValue或者直接a==null
(4)Console.WriteLine(a.Value == null);如果a值为空,则引发 System.InvalidOperationException异常

4.null值合并运算符

【Type A=B??C】若B为空则A取值C,否则A取值B

int? age = null;
age = age ?? 25;
Console.WriteLine("age:" + age);

这里写图片描述

(1)B必须是可空的值类型或者引用类型
(2)null合并运算符为右结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(b??c)”计算

猜你喜欢

转载自blog.csdn.net/wucdsg/article/details/78966191