一、核心运算符:直接解决空值问题
1.??空合并运算符
- 作用:左侧为
null时,返回右侧值,否则返回左侧值。 - 代码对比:
// 传统写法 string name; if (input != null) { name = input; } else { name = "unknown"; } // 使用 ?? 简化 string name = input ?? "unknown";
2.?.空条件运算符
- 作用:安全访问成员或方法,避免空引用异常。
- 代码对比:
// 传统写法(可能崩溃) int length = person.address.city.length; // 使用 ?. 安全访问 int? length = person?.address?.city?.length; // 任何一级为null则返回null
二、辅助运算符:扩展空值处理场景
3.??=空合并赋值(c# 8+)
- 作用:变量为
null时赋新值。list<int> data = null; data ??= new list<int>(); // 等效:if (data == null) data = new list<int>();
4.!非空断言(c# 8+)
- 作用:明确告诉编译器“此处不为
null”,慎用!string? text = gettext(); console.writeline(text!.length); // 开发者保证text非空
三、其他常用运算符:提升代码效率
5.?:三元运算符
- 作用:简化条件判断。
string status = score > 60 ? "通过" : "未通过";
6.as安全类型转换
- 作用:转换失败返回
null,不抛异常。object obj = "hello"; string str = obj as string; // 成功返回字符串,失败返回null
7.is类型检查与模式匹配(c# 7+)
- 作用:类型判断与值提取一步到位。
if (obj is int number) { console.writeline($"数字:{number}"); }
四、速查表:运算符使用场景
| 问题场景 | 运算符 | 示例代码 | 等效传统写法 |
|---|---|---|---|
| 变量为空时使用默认值 | ?? | var result = value ?? 0; | value != null ? value : 0 |
| 安全访问可能为空的对象 | ?. | var city = person?.address?.city; | if (person != null) person.address... |
| 延迟初始化 | ??= | list ??= new list(); | if (list == null) list = new... |
| 明确断言变量非空 | ! | text!.trim(); | 无直接等效(需自行确保非空) |
五、避坑指南
别滥用
!运算符// 错误用法:隐藏潜在的空引用风险 var length = getnullablestring()!.length; // 正确做法:优先使用 ?? 或 ?. var safelength = getnullablestring()?.length ?? 0;
值类型可空处理
int? nullableint = null; int value = nullableint ?? -1; // 必须处理null!
到此这篇关于c# 空值处理运算符??、?. 及其它常用符号的文章就介绍到这了,更多相关c# 空值处理运算符 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论