Skip to content

NET种问号的各种用法

约 397 字大约 1 分钟

NET

2025-12-19

?、 ??、 ?.、 ??=、 ?:、 ?[] 小朋友你是否有很多问号?

种的语法糖糖,有很多问号,非常的强大!他们是怎么用的?

可为空类型修饰符(?)

一些类型默认不能为null,可以使用? 把他变成可为空类型

int x = 10;
//int xx = null; //会报错: 无法将 null 转换为“int”,因为后者是不可为 null 的值类型
int? xx = null;
if (xx.HasValue) Console.WriteLine(xx);
else Console.WriteLine("xx is null");
//输出 xx is null

Null合并运算符(??)

返回第一个不为null的值

string str1 = null;
string str2 = "str2";
var strResult = str1 ?? str2;
Console.WriteLine(strResult); //输出 str2

//扩展一下
string str11 = null;
string str22 = null;
string str33 = "str33";
var str2Result = str11 ?? str22 ?? str33;
Console.WriteLine(str2Result); //输出 str33

Null合并赋值运算符(??=)

左边值为null时,讲等号右边的值赋给左边的

string name = "limei";
name ??= "kangkang";
Console.WriteLine(name);//输出 limei

string cname = null;
cname ??= "张三";
Console.WriteLine(cname);//输出 张三

三元运算符(?:)

类似简写的if else 。对bool求值,满足返回后的值,不满足返回:后的

int age = 18;
string desc = age >= 18 ? "成年" : "未成年";
Console.WriteLine(desc);//输出 成年

Null条件索引访问运算符(?[])

针对数组之类可以使用所引起访问的元素,检查对象是否为null。如果为null,则返回null不会抛出异常,如果不为null正常访问对于元素

int[] strArr1 = { 1, 2, 3, 4, 5 };
int? ii = strArr1?[1];
Console.WriteLine(ii); //输出 2

int[] strArr2 = null;
int? iii = strArr2?[2];
Console.WriteLine(iii); //输出空