C#中单问号(?)和双问号(??)的用法整理

C#中单问号(?)和双问号(??)的用法整理

一、单问号(?)

在C#中,单问号(?)用来判断对象是否为null。如果对象为null,则返回null;否则返回对象的值。

1.1. 使用示例

int? num = null;
int? num2 = 7;

Console.WriteLine(num?.ToString()); // 输出null
Console.WriteLine(num2?.ToString()); // 输出7

二、双问号(??)

在C#中,双问号(??)用来提供默认值。如果左边的值为空,则返回右边的值;否则返回左边的值。

2.1. 使用示例

int? num1 = null;
int num2 = 7;

Console.WriteLine(num1 ?? 0); // 输出0
Console.WriteLine(num2 ?? 0); // 输出7

需要注意的是,双问号(??)只能在左边的值为null或者Nullable类型时使用。如果左边的值不为null或不是Nullable类型,则不能使用双问号(??)。

三、单问号和双问号的组合应用

3.1. 使用示例

int? num1 = null;

int num2 = num1 ?? 0;
Console.WriteLine(num2); // 输出0

string str1 = null;

string str2 = str1?.ToLower() ?? "Default";
Console.WriteLine(str2); // 输出Default

Contact contact = null;
string phone = contact?.PhoneNumber ?? "DefaultPhone";
Console.WriteLine(phone); // 输出DefaultPhone

在上述的代码示例中,我们使用了单问号和双问号的组合应用,来判断对象是否为null,并提供默认值。其中:

  • 示例1:当num1为null时,将num2的值设为默认值0;
  • 示例2:当str1为null时,将str2的值设为默认值"Default";
  • 示例3:当contact或PhoneNumber为null时,将phone的值设为默认值"DefaultPhone"。

四、注意事项

在使用单问号和双问号时,需要注意以下几点:

  • 单问号只能判断对象是否为null,不能提供默认值;
  • 双问号只能提供默认值,不能判断对象是否为null;
  • 组合应用时,左边的值必须为Nullable类型或可能为空的类型,右边的值必须与左边的类型相同或可以隐式转换为左边的类型;
  • 不要滥用单问号和双问号,过多的使用会使代码难以阅读和维护。

五、总结

本文介绍了C#中单问号和双问号的使用方法和注意事项,希望能对大家有所帮助。在实际的开发中,可以根据不同的场景选择合适的方式来使用单问号和双问号,提高代码的可读性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中单问号(?)和双问号(??)的用法整理 - Python技术站

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

相关文章

  • 详解C#如何实现树形图列表

    下面是详解“详解C#如何实现树形图列表”的完整攻略。 1. 准备工作 在实现树形图列表之前,需要确保已经有一个能够与数据库交互的C#工程并能够成功地从数据库中获取数据。此外,我们还需要一个能够在前端界面展示数据结构的控件,常用的控件包括TreeView和DataGrid。 2. 数据库中存储数据结构 在数据库中,我们可以使用关系型、非关系型或基于图的数据库来…

    C# 2023年6月6日
    00
  • ASP.NET Identity的基本用法

    以下是“ASP.NET Identity的基本用法”的完整攻略: 什么是ASP.NET Identity ASP.NET Identity是一个用于管理用户身份和授权的框架。它提供了组API,可以轻松地将身份验证和授权功能添加到ASP.NET应用程序中。ASP.NET Identity持多种身份验证方法,包括用户名/密码、外部登录、双因素身份验证等。 ASP…

    C# 2023年5月12日
    00
  • 详解C#开发Android应用程序的流程

    详解C#开发Android应用程序的流程 一、开发环境配置 在开始C#开发Android应用程序之前,我们需要先配置好相应的开发环境: 1. 安装Visual Studio Visual Studio是C#程序开发的集成开发环境,可用于Windows和macOS平台。在Visual Studio官网下载对应操作系统的版本并安装。 2. 安装Visual St…

    C# 2023年6月7日
    00
  • C#修改及重置电脑密码DirectoryEntry实现方法

    下面是关于“C#修改及重置电脑密码DirectoryEntry实现方法”的完整攻略。 概述 在Windows操作系统中,重置或修改本地和域账户的密码是非常常见的操作,尤其是在管理大量计算机的企业环境中更是如此。C#程序可以通过使用DirectoryEntry对象来连接Active Directory进行密码管理。 步骤 下面是重置或修改密码的步骤: 步骤一:…

    C# 2023年5月15日
    00
  • 使用Deflate算法对文件进行压缩与解压缩的方法详解

    使用Deflate算法对文件进行压缩与解压缩的方法详解 什么是Deflate算法 Deflate算法是一种用于压缩数据的算法,它广泛应用于网络传输和数据存储等领域。Deflate算法使用了两种压缩技术:哈夫曼编码和LZ77算法,其中哈夫曼编码用于无损数据压缩而LZ77算法则用于有损数据压缩。 压缩文件的步骤 使用Deflate算法对文件进行压缩的步骤如下: …

    C# 2023年6月8日
    00
  • c#如何显式实现接口成员

    当一个类实现了一个接口时,它必须实现该接口中所定义的所有成员。这些成员可以是抽象的或者是具有实现的。 在某些情况下,我们可能需要在实现类中对接口的方法进行定制化的实现,而又不希望这个接口的方法对外暴露。这时候,我们可以使用“显式实现接口成员”的方式来实现。 以下是实现的步骤: 第一步:定义接口 在开始定义类时,首先要定义一个接口,该接口必须在类中实现。例如,…

    C# 2023年6月6日
    00
  • 深入线程安全容器的实现方法

    深入线程安全容器的实现方法 什么是线程安全容器 线程安全容器(Thread-Safe Container)是一个能够同时被多个线程访问的数据结构。线程安全容器能够保证多个并发线程可以并且不会出现数据异常。线程安全容器应该在多线程环境下使用,以避免多个线程同时操作同一数据的问题。线程安全容器提供了一些并发访问数据结构的方法,如添加、删除、查找和更新等。 线程安…

    C# 2023年5月15日
    00
  • 客户端实现蓝牙接收(C#)知识总结

    下面是关于“客户端实现蓝牙接收(C#)知识总结”的完整攻略。 知识总结 蓝牙简介 蓝牙技术是一种近程无线通信技术,用于在2.4GHz ISM频带上进行短距离数据通信。蓝牙技术具有低功耗、低成本及易于应用等特点,被广泛应用于消费电子、智能家居、医疗设备、安防等领域。 蓝牙规范 蓝牙协议规范由蓝牙核心规范、蓝牙连接规范、蓝牙应用规范和蓝牙设置规范四个部分组成。蓝…

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