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#中的LINQ to Objects详解(1)

    针对C#中的LINQ to Objects详解(1),我将为你提供以下的完整攻略: C#中的LINQ to Objects详解(1) 什么是LINQ to Objects? LINQ(Language-Integrated Query,语言集成查询),是C#语言(以及其他.NET语言)的一种查询数据的方式,它可以访问各种数据源,例如对象、数据库、XML以及各…

    C# 2023年6月1日
    00
  • C#实现学生成绩管理系统

    C#实现学生成绩管理系统 介绍 学生成绩管理系统是一种常见的应用,它提供了学生信息录入、成绩查阅等功能,方便教师和学生进行学习管理。C#是一种面向对象的编程语言,非常适合实现这种应用。 本文将介绍如何使用C#实现一个简单的学生成绩管理系统。我们将使用Visual Studio开发环境来快速构建应用。本系统将支持学生信息的录入、成绩的添加、修改和删除,以及成绩…

    C# 2023年6月7日
    00
  • C# Console.WriteLine()方法: 将指定字符串和行结束符写入标准输出流

    作用: Console.WriteLine()是C#中标准输出的方法,用于将指定的数据写入控制台。它可以输出各种类型的值,如字符串、数字、布尔值以及其他对象等等。 使用方法: 方法语法如下: Console.WriteLine(); Console.WriteLine(string value); Console.WriteLine(string forma…

    C# 2023年4月19日
    00
  • 仿IOS效果 带弹簧动画的ListView

    实现仿IOS效果带弹簧动画的ListView可以使用Android中的RecyclerView控件。以下是使用RecyclerView实现仿IOS效果带弹簧动画的ListView的完整攻略。 环境准备 在使用RecyclerView前,需要在项目中添加RecyclerView依赖。可以使用以下命令来添加RecyclerView依赖: implementati…

    C# 2023年5月15日
    00
  • C#交换两个变量值的几种方法总结

    C#交换两个变量值的几种方法总结 在C#程序中,经常需要交换两个变量的值。这个过程看起来很简单,但实际上有很多种实现方式。在本文中,我们将总结几种常见的交换两个变量值的方式。 1. 使用临时变量交换值 这是最基本的交换变量值的方法。我们可以创建一个临时变量,将变量A的值存储在临时变量中,然后将变量A的值设置为变量B的值,最后将临时变量的值设置为变量B的值。 …

    C# 2023年5月31日
    00
  • c# 实现网页加载后将页面截取为长图片

    下面是C#实现网页加载后将页面截取为长图片的完整攻略。 1. 确定工具和库 要实现该功能,我们需要使用两个库,OpenQA.Selenium和Selenium.Support,前者是用于C#的Web自动化测试库,后者是一个Selenium的附加库。 另外,我们还需要下载Chrome浏览器驱动程序,它将允许我们使用我们自己的浏览器进行测试,并且提供截图等更多便…

    C# 2023年6月1日
    00
  • asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)

    获取机器硬件信息是一个常见的需求,特别是在系统监控和性能优化的场景下。ASP.NET提供了多种方法来获取机器硬件信息,包括CPU频率、磁盘可用空间、内存容量等。 以下是获取机器硬件信息的完整攻略。 1. 获取CPU频率 获取CPU频率可以通过System.Management命名空间中的ManagementObject类来实现。具体代码如下: using S…

    C# 2023年6月3日
    00
  • C#简单实现子窗体向父窗体传值的方法

    C# 简单实现子窗体向父窗体传值有多种方法,下面介绍两种常用的方法。 方法一:使用属性 在子窗体中定义一个属性,用于存储需要传递的值。 public partial class ChildForm : Form { private string _value; public string Value { get { return _value; } set …

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