当前位置: 代码网 > it编程>编程语言>Asp.net > C#中的? 和 ??运算符使用详解

C#中的? 和 ??运算符使用详解

2026年02月02日 Asp.net 我要评论
在 c# 中,?(null 条件运算符)和 ??(null 合并运算符)是两个非常有用的运算符,用于简化 null 值检查和处理。1.?(null 条件运算符)? 运算符用于在访问成员或元素之前检查对

在 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; }
}

注意事项

  1. ? 运算符会改变表达式的类型,使其变为可空类型
  2. ?? 右侧的表达式只有在左侧为 null 时才会计算
  3. 这些运算符可以大大减少代码中的 null 检查样板代码
  4. 在性能关键路径上,? 比手动 null 检查有轻微开销

这两个运算符是现代 c# 编程中处理 null 值的推荐方式,可以使代码更简洁、更安全。

到此这篇关于c#中的? 和 ??运算符详解的文章就介绍到这了,更多相关c#运算符? 和 ??内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com