C#8.0优雅使用null运算符
null合并运算符??
用法:左侧操作数不为空,则结果为左侧操作数,左侧操作数为空,则结果为右侧值。
示例:
string? str = null;
Console.WriteLine(str ?? "测试空值字符串"); //打印 测试空值字符串
str = "非空字符串";
Console.WriteLine(str ?? "测试空值字符串"); //打印 非空字符串
注意:
- 合并运算符可用于引用类型和可空值类型。
- 如果左侧操作数不为空,不会执行右侧表达式计算。
null合并赋值运算符??=
用法:如果左侧操作数为空则将右侧操作数赋值给左侧操作数。
示例:
string? str = null;
str ??= "合并赋值运算符"; //str值为 合并赋值运算符
注意:
- 合并赋值运算符可用于引用类型和可空值类型。
- 如果左侧操作数不为空,不会执行右侧表达式计算。
null条件运算符?.
用法:?.运算符可以像标准的"."运算符一样调用成员的属性和方法,而不用担心调用者本身为空的而出现NullReferenceException异常。如果运算符左侧为空则运算结果为null。
示例:
StringBuilder sb = null;
string s =sb?.ToString(); // s =null
注意:
- ?.运算符在遇到空值后不会再执行后面的运算,直接返回null
- 最终表达式必须能够处理空值。如错误示例:
int length = sb?.ToString().Length; //error:int can not be null
,将length改为可空值类型才能正常接收int? length = sb?.ToString().Length;//ok:int? can be null
- null条件运算符可以和常用类型成员(字段,属性,方法,索引器)一起使用,也可与null合并运算符一起使用
string s =sb?.ToString()??"nothing"; // s ='nothing'
合理使用null运算符能减少可能产生的运行时Null异常增加代码健壮性,同时避免了大量的非空判断,更加优雅,优雅永不过时~