C#中?、?.、??、??=运算符的用法

下面是详细讲解C#??.????=运算符的用法:

?运算符

?运算符在C#中表示空值传播(Null Propagation),其作用是防止空引用异常(NullReferenceException)的发生,它的基本语法形式如下:obj?.PropertyName

obj不为null时,?.会直接返回obj.PropertyName的值;当objnull时,?.会返回null,不会抛出空引用异常。

下面是一个示例代码:

class Person {
    public string Name { get; set; }
    public House House { get; set; }
}

class House {
    public string Address { get; set; }
}

Person person = null;
string address = person?.House?.Address; // address = null

在上面的示例中,personnull,如果我们直接访问person.House.Address,则会抛出空引用异常,但是我们使用了person?.House?.Address,这样即使personnull,代码也不会抛出异常,而是直接返回了null

?. 运算符

?.运算符是?运算符的简写形式,它在调用可空对象的方法、属性和索引器时非常有用,它的基本语法形式如下:obj?.MethodName()obj?.PropertyNamearray?[index]

obj不为null时,?.会直接调用obj的方法、属性或索引器,并返回其结果;当objnull时,?.会返回null,不会抛出空引用异常。

下面是一个示例代码:

string str = null;
int length = str?.Length ?? 0; // length = 0

在上面的示例中,strnull,如果我们直接调用str.Length,则会抛出空引用异常,但是我们使用了str?.Length,这样即使strnull,代码也不会抛出异常,而是直接返回了null,另外我们使用??运算符为null设置了一个默认值。

??运算符

??运算符在C#中表示空合并运算符(Null Coalescing Operator),用于为一个null值提供一个默认值,它的基本语法形式如下:obj1 ?? obj2

obj1不为null时,??直接返回obj1的值;当obj1null时,??返回obj2的值。

下面是一个示例代码:

int? num1 = null;
int num2 = num1 ?? 0; // num2 = 0

在上面的示例中,num1null,我们使用了num1 ?? 0,这样即使num1null,代码也不会抛出异常,而是直接返回了0

??=运算符

??=运算符在C#8.0中引入,它可以将一个值赋给一个可空类型的变量,当变量的值为null时,才会进行赋值操作,它的基本语法形式如下:obj1 ??= obj2

obj1不为null时,??=不做任何操作;当obj1null时,??=会将obj2的值赋给obj1

下面是一个示例代码:

int? num1 = null;
num1 ??= 10; // num1 = 10

在上面的示例中,num1null,我们使用了num1 ??= 10,这样num1的值就被赋为10

总结一下,??.????=运算符分别表示空值传播、空值传播简写、空合并和空合并赋值,它们可以帮我们简化代码,避免空引用异常的发生。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中?、?.、??、??=运算符的用法 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • C#窗体-数据库连接及登录功能的实现案例

    下面是“C#窗体-数据库连接及登录功能的实现案例”的攻略: 1. 案例需求 我们需要开发一个C#窗体应用程序,要求实现以下功能: 与数据库建立连接 用户登录功能,登录成功后跳转到主页面 用户登录失败,展示错误提示 2. 开发步骤 2.1 数据库连接 我们可以使用ADO.NET来实现与数据库的连接。首先需要在项目中添加数据库连接: 打开Visual Studi…

    C# 2023年6月1日
    00
  • C# Winform实现导入和导出Excel文件

    让我为你详细解释一下“C# Winform实现导入和导出Excel文件”的完整攻略。 1. 需要用到的Nuget包 在C# Winform应用程序中,需要先安装Excel处理的Nuget包,在Visual Studio的Nuget包管理器中搜索NPOI,找到NPOI这个包,安装即可。 2. 导入Excel文件 下面是一个简单的示例程序,用于从Excel文件中…

    C# 2023年6月1日
    00
  • websocket与C# socket相互通信

    web端代码就是js代码,C#有两种方式:使用第三方库,如Fleck,使用C#原生socket编程实现   web端: <!doctype html> <html lang=”zh-CN”> <head> <meta charset=”UTF-8″> <title>下发网站上文件到学生机</t…

    C# 2023年4月24日
    00
  • C#使用Socket实现服务器与多个客户端通信(简单的聊天系统)

    该攻略主要涉及到以下几个方面: 建立Socket服务器 接收客户端连接 处理客户端消息 向客户端发送消息 建立Socket服务器 要建立Socket服务器,我们需要创建一个Socket对象,并绑定一个本地IP和端口号。代码如下: Socket serverSocket = new Socket(AddressFamily.InterNetwork, Sock…

    C# 2023年6月1日
    00
  • Linq利用Distinct去除重复项问题(可自己指定)

    Linq利用Distinct去除重复项问题(可自己指定) 在Linq中,我们可以使用Distinct方法来去除重复项。但是默认情况下,Distinct方法只能去除基本数据类型的重复项,在处理对象时会遇到一些问题。下面我们来详细讲解如何使用Linq的Distinct方法去除重复项,同时解决对象去重的问题。 1. 基本类型的Distinct去重 对于基本数据类型…

    C# 2023年6月1日
    00
  • C# Directory.GetFiles()函数案例详解

    C# Directory.GetFiles()函数案例详解 1. 函数介绍 C# Directory.GetFiles() 函数是一个用于获取指定目录下的所有文件的方法。该方法接受一个目录路径作为参数,并返回一个字符串数组,包含了指定目录中所有文件的路径信息。 该函数的定义如下: public static string[] GetFiles(string …

    C# 2023年6月1日
    00
  • C#(.net)中按字节数截取字符串最后出现乱码问题的解决

    标题:C#(.NET)中按字节数截取字符串最后出现乱码问题的解决 问题描述 在C#(.NET)中,我们经常会遇到需要按字节数来截取字符串的情况,比如截取标题等场景。然而,对于一些非ASCII字符,它们的字节数并不是1,这就导致按字节数截取字符串时会出现乱码问题。尤其是最后一个字符被截断时,更容易出现这种情况。该怎样解决这个问题呢? 解决方法 我们可以利用.N…

    C# 2023年6月8日
    00
  • C#通过oledb访问access数据库的方法

    C#通过oledb访问access数据库的完整攻略 简介 在C#中,我们可以使用OLE DB提供程序来访问基于 OLE DB 的数据库。Microsoft Access是OLE DB的支持者之一,因此我们可以使用OLE DB连接器来访问Microsoft Access数据库。这篇攻略将向您介绍如何通过OLE DB访问Access数据库。 步骤 以下是访问Ac…

    C# 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部