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日

相关文章

  • 2016主流编程语言的详细对比

    2016主流编程语言的详细对比攻略 介绍 不同的编程语言在不同的场合具有不同的特点。因此,为了在选择编程语言时不至于盲目,有必要对不同的编程语言进行对比。本文将介绍2016年主流编程语言的详细对比,帮助读者快速了解不同编程语言的优劣,选择最适合的编程语言。 对比内容 本文将对2016年主流编程语言进行以下方面的对比: 语言特点:介绍编程语言的基本特性,如编译…

    C# 2023年6月7日
    00
  • asp.net 临时数据保存实现代码

    针对“asp.net 临时数据保存实现代码”的问题,下面是一份详细攻略: 1. 前置知识 在开始这个攻略之前,我们需要掌握以下几个asp.net的知识点: Session机制:它能够在一个用户会话中存储和检索变量的信息。 ViewState机制:它可以在一个ASP.NET Web页面中用于在一些控件之间保存状态信息,从而避免了在每次Post请求时重新获取页面…

    C# 2023年5月31日
    00
  • 在ASP.NET 2.0中操作数据之七十三:用Managed Code创建存储过程和用户自定义函数(上部分)

    在ASP.NET 2.0中操作数据之七十三:用Managed Code创建存储过程和用户自定义函数(上部分) Managed Code是指能够在托管代码环境中运行的代码,与之相对的是Unmanaged Code,需要依赖于操作系统底层的API和COM组件等,而且不受托管代码环境控制,容易引起内存泄漏等问题。本文将介绍如何使用Managed Code创建存储过…

    C# 2023年5月31日
    00
  • C#调用WebService实例开发

    C#调用WebService实例开发攻略 1. 创建Web Service 1.1 使用Visual Studio创建Web Service 在Visual Studio中,选择“文件”->“新建”->“项目”,在“新建项目”窗口中,选择“ASP.NET Web服务应用程序”作为项目类型,输入项目名称,点击“确定”按钮创建项目。在新建项目的过程中…

    C# 2023年6月6日
    00
  • NopCommerce架构分析之(六)自定义RazorViewEngine和WebViewPage

    NopCommerce架构分析之(六)自定义RazorViewEngine和WebViewPage 在NopCommerce中,RazorViewEngine和WebViewPage是用于处理视图的两个重要组件。RazorViewEngine用于查找和呈现视图,而WebViewPage用于定义视图的布局和内容。本文将介绍如何自定义RazorViewEngin…

    C# 2023年5月15日
    00
  • C# 中如何利用lambda实现委托事件的挂接

    在C#中,使用Lambda表达式可以非常方便地实现委托事件的挂接。下面是详细的攻略: 理解Lambda表达式和委托事件的概念 Lambda表达式是C# 3.0引入的特性,它可以使得代码更加简洁和易读。在委托事件中,委托是一种类类型,它可以存储一系列的方法,并且可以被调用。事件是委托的一个特例,它只能被订阅,不能被直接调用。 声明委托和事件 C#中的委托和事件…

    C# 2023年6月6日
    00
  • C#中自定义事件和委托实例

    C#中自定义事件和委托实例是一项重要的编程技能。下面是一个完整的攻略,包括理解委托和事件、如何自定义委托和事件、如何订阅和取消订阅事件、如何触发事件等。 理解委托和事件 委托是一种类型,它可以封装一个或多个方法。委托类型的实例可以指向任何具有与其签名匹配的方法。在C#中,委托是如何定义的: delegate void MyDelegate(int arg1,…

    C# 2023年5月31日
    00
  • 详解VS2017 Linux 上.NET Core调试

    详解VS2017 Linux 上.NET Core调试 在本攻略中,我们将详细介绍如何使用Visual Studio 2017在Linux上调试.NET Core应用程序。我们将介绍如何配置调试环境、如何在Visual Studio中设置调试器,并提供两个示例说明。 配置调试环境 在将.NET Core应用程序调试到Linux上之前,需要进行以下准备工作: …

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