C# 空值处理运算符??、?. 及其它常用符号

 更新时间:2025年11月20日 11:49:04   作者:siyun.chen  
本文主要介绍了C# 空值处理运算符??、?. 及其它常用符号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、核心运算符:直接解决空值问题

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();无直接等效(需自行确保非空)

五、避坑指南

  1. 别滥用 ! 运算符

    // 错误用法:隐藏潜在的空引用风险
    var length = GetNullableString()!.Length; 
    // 正确做法:优先使用 ?? 或 ?.
    var safeLength = GetNullableString()?.Length ?? 0;
    
  2. 值类型可空处理

    int? nullableInt = null;
    int value = nullableInt ?? -1; // 必须处理null!
    

到此这篇关于C# 空值处理运算符??、?. 及其它常用符号的文章就介绍到这了,更多相关C# 空值处理运算符 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# SelectedIndexChanged事件详解

    C# SelectedIndexChanged事件详解

    这篇文章主要介绍了C# SelectedIndexChanged事件详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C#算法之全排列递归算法实例讲解

    C#算法之全排列递归算法实例讲解

    这篇文章主要介绍了C#算法之全排列递归算法实例讲解,本文讲解了算法思路、算法代码实例、解决重复元素的排列问题等内容,需要的朋友可以参考下
    2014-10-10
  • 浅谈Visual C#进行图像处理(读取、保存以及对像素的访问)

    浅谈Visual C#进行图像处理(读取、保存以及对像素的访问)

    本文主要介绍利用C#对图像进行读取、保存以及对像素的访问等操作,介绍的比较简单,希望对初学者有所帮助。
    2016-04-04
  • C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?

    C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?

    这篇文章主要介绍了C# MVC模式中应该怎样区分应用程序逻辑(Controller层)和业务逻辑(Model层)?,这也小编做.NET项目时经常思考和让人混乱的一个问题,这篇文章写的挺好,一下清晰了许多,需要的朋友可以参考下
    2015-06-06
  • C#保存图片到数据库并读取显示图片的方法

    C#保存图片到数据库并读取显示图片的方法

    将图像保存到SQL server2000的Image字段中
    2013-04-04
  • C#面向对象设计的七大原则

    C#面向对象设计的七大原则

    这篇文章主要为大家详细介绍了C#面向对象设计的七大原则,未读文章之前大家说一说都有哪七大原则,是不是七大原则都可以全部列出,想要了解的朋友可以参考一下
    2016-05-05
  • C#集合之集(set)的用法

    C#集合之集(set)的用法

    这篇文章介绍了C#集合之集(set)的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • 使用C#实现一个PPT遥控器

    使用C#实现一个PPT遥控器

    由于本人需要参加的讨论会比较多,每次都会涉及到PPT,有时候坐在电脑旁讲会比较不生动,前人就发明了PPT遥控器,今天就给大家介绍下基于C#实现ppt遥控器,感兴趣的朋友一起看看吧
    2021-05-05
  • C#判断指定驱动器是否已经准备就绪的方法

    C#判断指定驱动器是否已经准备就绪的方法

    这篇文章主要介绍了C#判断指定驱动器是否已经准备就绪的方法,涉及C#针对硬件IO操作的技巧,需要的朋友可以参考下
    2015-04-04
  • C#图片处理3种高级应用

    C#图片处理3种高级应用

    本文介绍C#图片处理高级应用,这些功能并无多大技术含量。全部基于.Net Framework类库完成,代码中包含了C#图片处理的一些基础知识,与大家分享,个人能力有限,不足之处还请及时指正。
    2015-10-10

最新评论