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

yizhihongxing

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#中的密封类与Java中的final类相似,不允许其他类继承它。 如何定义一个密封类? 在C#中,我们可以通过在类的前面添加 sealed 关键字来定义一个密封类。例如: sealed class MySealedClass { // 类定义 } 密封类的特点 密封类不能被其他类继承。 密封类一…

    C# 2023年5月15日
    00
  • ASP.NET MVC前台动态添加文本框并在后台使用FormCollection接收值

    ASP.NET MVC是一种针对Web应用程序的Web框架,它支持使用C#或VB.NET编程语言来创建动态、响应性的Web应用程序。本文将详细介绍如何在ASP.NET MVC前台动态添加文本框并在后台使用FormCollection接收值的过程。 准备工作 在开始本文的教程之前,你需要进行以下准备工作: 首先,你需要安装Visual Studio 2017或…

    C# 2023年6月3日
    00
  • 理解ASP.NET Core 配置系统

    理解ASP.NET Core 配置系统 在ASP.NET Core应用程序中,配置系统是一项非常重要的任务。配置系统可以帮助我们管理应用程序的配置信息,提高应用程序的可维护性和可扩展性。在本攻略中,我们将介绍ASP.NET Core配置系统的基本概念和使用方法,并提供两个示例说明。 1. 配置系统的基本概念 在ASP.NET Core应用程序中,配置系统是由…

    C# 2023年5月16日
    00
  • C#中数组、ArrayList和List三者的区别详解及实例

    下面是详细讲解 “C#中数组、ArrayList和List三者的区别详解及实例” 的完整攻略。 1. 数组 1.1 定义方式 数组是同一种数据类型的元素的集合,它的大小是固定的。 在 C# 中,我们可以通过以下方式定义和初始化一个数组: int[] arr1 = new int[5]; // 定义一个包含 5 个元素的 int 数组 int[] arr2 =…

    C# 2023年5月15日
    00
  • ASP.NET Core Web资源打包与压缩技术介绍

    在ASP.NET Core中,可以使用Web资源打包和压缩技术来提高Web应用程序的性能和加载速度。本文将介绍ASP.NET Core Web资源打包和压缩技术的完整攻略。 步骤 步骤1:安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包 首先,需要安装Microsoft.AspNetCore.Mvc.R…

    C# 2023年5月17日
    00
  • C#中用管理员身份运行程序代码实例

    下面是“C#中用管理员身份运行程序代码实例”的完整攻略。 1. 简介 在C#中,我们可以通过代码来申请管理员权限来运行程序。这样可以确保我们的程序拥有足够的权限来执行需要的操作。 2. 代码实现 示例一:UAC(用户账户控制)提示框 在Windows Vista及以后的版本中,操作系统引入了用户账户控制(UAC),用于提高系统安全性。UAC会提示用户是否允许…

    C# 2023年5月31日
    00
  • C# 字符串与unicode互相转换实战案例

    下面是详细讲解“C# 字符串与unicode互相转换实战案例”的完整攻略: 背景 在C#编程中,有时需要将字符串与unicode之间进行转换。本文将针对这一问题进行探讨,并提供实战案例。 技术准备 在进行转换操作前,需要先掌握以下技术: 1. 字符串类型 在C#中,字符串类型被定义为System.String类。该类型可以容纳任何Unicode字符,通常使用…

    C# 2023年6月8日
    00
  • C#中常量和只读变量的区别小结

    下面是详细的讲解“C#中常量和只读变量的区别小结”的完整攻略: 常量和只读变量的区别 在C#中,常量和只读变量都用来表示一些固定不变的值,但它们之间有明显的区别。 常量 常量在定义后就无法再次被修改。常量的值必须在编译时确定。常量使用const关键字来定义,如下所示: const int MaxValue = 100; 常量的名称必须以大写字母开头。在使用常…

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