首页 > 编程语言 >掌握 C# 中的空合并运算符

掌握 C# 中的空合并运算符

时间:2024-07-02 09:02:11浏览次数:3  
标签:city string C# 合并 运算符 null 空值

高效处理空值是软件开发中的常见要求。C# 提供了强大的工具来管理空值,包括空值合并运算符 (??)。本文探讨了空值合并运算符、其优点以及它如何简化和增强您的代码。

目录

  1. 空合并运算符简介
  2. 空合并运算符的基本用法
  3. 与空条件运算符结合
  4. 链接空合并运算符
  5. 空合并赋值运算符
  6. 实例
  7. 传统空处理与空合并运算符
  8. 结论

介绍

C# 中的空值合并运算符 (??) 允许您为可能为空的表达式提供默认值。此运算符简化了对空值的处理,使您的代码更具可读性且更不容易出错。

空合并运算符的基本用法

空合并运算符的语法很简单。

var result = nullableExpression ?? defaultValue;

例子

string name = null;
string displayName = name ?? "Guest";
Console.WriteLine(displayName); // Output: Guest

在此示例中,displayName 被分配了值“Guest”,因为名称为空。

与空条件运算符结合

空条件运算符 (?.) 可与空合并运算符一起使用,以安全地遍历潜在的空引用。

例子

Person person = null;
string city = person?.Address?.City ?? "Unknown";
Console.WriteLine(city); // Output: Unknown

空合并赋值运算符

C# 8.0 中引入了空合并赋值运算符 (??=),如果变量当前为空,则为其赋值。

例子

string name = null;
name ??= "Default Name";
Console.WriteLine(name); // Output: Default Name

这里,名称被分配为“默认名称”,因为它最初为空。

实例

示例 1.默认配置。

public class Config
{
    public string Environment { get; set; }
}
Config config = null;
string environment = config?.Environment ?? "Production";
Console.WriteLine(environment); // Output: Production

示例 2.带回退功能的安全导航

public class User
{
    public Profile Profile { get; set; }
}
public class Profile
{
    public string Email { get; set; }
}
User user = null;
string email = user?.Profile?.Email ?? "[email protected]";
Console.WriteLine(email); // Output: [email protected]

传统空处理与空合并运算符

传统方法

在这些运算符可用之前,处理空值需要进行显式空检查,这可能很冗长且繁琐。

Person person = null;
string city;
if (person != null)
{
    if (person.Address != null)
    {
        city = person.Address.City;
    }
    else
    {
        city = "Unknown";
    }
}
else
{
    city = "Unknown";
}
Console.WriteLine(city); // Output: Unknown

现代方法

使用空合并运算符和空条件运算符,相同的逻辑变得更加简单和更具可读性。

Person person = null;
string city = person?.Address?.City ?? "Unknown";
Console.WriteLine(city); // Output: Unknown

结论

空值合并运算符 (??) 及其配套空值合并赋值运算符 (??=) 提供了强大而简洁的方法来处理 C# 中的空值。它们显著减少了空值检查所需的样板代码,并使您的代码更具可读性和可维护性。通过掌握这些运算符,您可以编写更简洁、更强大的 C# 代码来高效处理空值。

标签:city,string,C#,合并,运算符,null,空值
From: https://blog.csdn.net/xiefeng240601/article/details/140100374

相关文章

  • C# 中的并发和并行
    介绍并发和并行是现代编程中的关键概念,可帮助开发人员创建高效、响应迅速、高性能的应用程序。在C#中,这些概念尤其重要,因为该语言对多线程和异步编程提供了强大的支持。本文介绍了C#中的并发和并行,包括关键概念、优点和实际示例。并发C#中的并发涉及同时管理多个任......
  • C++文件输入输出
    参考博文:https://blog.csdn.net/houbincarson/article/details/136327765/*文件输入输出fstream有三个文件流类:std::ifstream:用于从文件中读取数据的输入流对象。std::ofstream:用于向文件中写入数据的输出流对象。std::fstream:用于读写文件的输入输出流对象。*/#include<f......
  • Oracle 上机
    --1.(3分)查找每个部门的最高工资员工编号及其下属信息。selecte2.empno,e1.*fromempe1join(select*fromempwhere(deptno,sal)in(selectdeptno,max(sal)fromempgroupbydeptno))e2one1.mgr=e2.empno;/*2.(5分)有成绩表如下(使用with子查询):准考证号科......
  • Oracle day15
    /*createtablef0307(idnumber,productnamevarchar2(100),parentidnumber);insertintof0307values(1,'汽车',null);insertintof0307values(2,'车身',1);insertintof0307values(3,'发动机',1);insertintof0307values(4......
  • camunda多租户技术架构介绍和测试验证
    多租户考虑的是单个Camunda安装应该为多个租户提供服务的情况。对于每个租户,应做出一定的隔离保证。例如,一个租户的流程实例不应干扰另一租户的流程实例。多租户可以通过两种不同的方式实现。一种方法是每个租户使用一个流程引擎。另一种方法是仅使用一个流程引擎并将数据与租......
  • Oracle day14
    /*createtablef0810(idnumber,timesvarchar2(50));insertintof0810values(1,'2019-12-2511:01');insertintof0810values(2,'2019-12-2511:03');insertintof0810values(3,'2019-12-2511:05');insertintof0810values(4,......
  • camunda数据库表结构详细说明
    本文基于Camunda7.19.0版本,介绍Camunda开源工作流引擎的数据库架构和ER模型,Camunda7.19.0共49张表,包括了BPMN流程引擎、DMN规则引擎、CMMN引擎、历史数据、用户身份等方面的表结构定义,以及表与表之间的关联关系。1、camunda数据库结构综述Camunda流程引擎的数据库架构由多个表组......
  • C#面:实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
    对生成的数组排序,需要支持升序、降序两种顺序usingSystem;usingSystem.Collections.Generic;classProgram{staticvoidMain(string[]args){Randomrandom=newRandom();HashSet<int>set=newHashSet<int>();while(set.C......
  • 用质因数求解最大公约数(gcd)和最小公倍数(lcm)
    用质因数求解最大公约数(gcd)思路分析:1、质因数:(素因数或质因子)他指的是能整除给定正整数的质数。例如:36可以分解为223*3,其中2和3就是质因数。2、质因数求解最大公约数:对每个数进行质因数分解;找出所有数的共有质因数,并取每个共有质因数的最低次幂;将这些最低次幂的质因......
  • 【Spark Core】RDD详解
    一、RDD基本介绍1、为什么需要RDD没有RDD之前:1.MR:只提供了map和reduce的API,而且编写麻烦,运行效率低!---早淘汰了!2.使用Python/Scala/Java的本地集合:但是只能完成本地单机版的,如果要实现分布式的,---很困难!  所以需要有一个分布式的数据抽象,也就是用该抽象,可......