在 c# 中,?(null 条件运算符)和 ??(null 合并运算符)是两个非常有用的运算符,用于简化 null 值检查和处理。
1.?(null 条件运算符)
? 运算符用于在访问成员或元素之前检查对象是否为 null。如果对象为 null,则返回 null 而不抛出异常。
基本用法
string name = person?.name; // 等同于 string name = (person != null) ? person.name : null;
链式调用
int? length = people?.firstordefault()?.name?.length;
方法调用
person?.printname(); // 如果 person 为 null,则不执行方法
数组/集合访问
int? firstitem = array?[0];
2.??(null 合并运算符)
?? 运算符用于在左侧表达式为 null 时返回右侧的值。
基本用法
string displayname = name ?? "匿名用户"; // 等同于 string displayname = (name != null) ? name : "匿名用户";
与?结合使用
string name = person?.name ?? "未知";
链式使用
string configvalue = config?.settings?.value ?? "默认值";
3.??=(c# 8.0 引入的 null 合并赋值运算符)
name ??= "默认值";
// 等同于
if (name == null)
{
name = "默认值";
}
实际应用示例
class program
{
static void main()
{
person person = null;
// 使用 ?. 避免 nullreferenceexception
string name = person?.name;
console.writeline(name); // 输出 null
// 使用 ?? 提供默认值
string safename = person?.name ?? "无名氏";
console.writeline(safename); // 输出 "无名氏"
// 复杂示例
int? age = person?.age ?? 18;
console.writeline(age); // 输出 18
// ??= 运算符
string nickname = null;
nickname ??= "小新";
console.writeline(nickname); // 输出 "小新"
}
}
class person
{
public string name { get; set; }
public int age { get; set; }
}
注意事项
?运算符会改变表达式的类型,使其变为可空类型??右侧的表达式只有在左侧为 null 时才会计算- 这些运算符可以大大减少代码中的 null 检查样板代码
- 在性能关键路径上,
?比手动 null 检查有轻微开销
这两个运算符是现代 c# 编程中处理 null 值的推荐方式,可以使代码更简洁、更安全。
到此这篇关于c#中的? 和 ??运算符详解的文章就介绍到这了,更多相关c#运算符? 和 ??内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论