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#.NET中日志信息写入Windows日志中解决方案

    c#.NET中日志信息写入Windows日志中解决方案

    c#.NET中日志信息写入Windows日志中解决方案...
    2007-03-03
  • c#分页显示服务器上指定目录下的所有图片示例

    c#分页显示服务器上指定目录下的所有图片示例

    这篇文章主要介绍了c#分页显示服务器上指定目录下的所有图片示例,需要的朋友可以参考下
    2014-05-05
  • C#基础之泛型

    C#基础之泛型

    泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。接下来通过本文给大家介绍c#基础之泛型,感兴趣的朋友一起学习吧
    2016-08-08
  • C#中的var关键字用法介绍

    C#中的var关键字用法介绍

    这篇文章介绍了C#中的var关键字用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • C#多线程TPL常见操作误区与异常处理

    C#多线程TPL常见操作误区与异常处理

    本文详细讲解了C#多线程TPL常见操作误区与异常处理,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C#获取注册表指定键值操作

    C#获取注册表指定键值操作

    这篇文章主要介绍了C#获取注册表指定键值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C#实现俄罗斯方块

    C#实现俄罗斯方块

    这篇文章主要为大家详细介绍了C#实现俄罗斯方块小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C# wpf定义ViewModelBase进行简化属性绑定

    C# wpf定义ViewModelBase进行简化属性绑定

    绑定机制是wpf的核心,也是界面独立的根本,尤其是使用了mvvm模式,本文主要介绍了wpf如何定义ViewModelBase进行简化属性绑定,需要的可以参考下
    2024-04-04
  • c#如何实现接口事件

    c#如何实现接口事件

    这篇文章主要介绍了c#如何实现接口事件,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下
    2020-10-10
  • C#控制台程序输出等腰三角形并居中显示实例

    C#控制台程序输出等腰三角形并居中显示实例

    这篇文章主要介绍了C#控制台程序输出等腰三角形并居中显示实例,本文直接给出实现代码,需要的朋友可以参考下
    2015-03-03

最新评论