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

 更新时间:2022年05月24日 14:03:22   作者:springsnow  
本文详细讲解了C#中单问号(?)和双问号(??)的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、可空类型修饰符(?)

C#2.0里面实现了Nullable数据类型

//A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成int,因为后者是不可以为null的值类型。
private int getNum = null;

//B.如果修改为下面的写法就可以初始指为null,在特定情况下?等同于基础类型为Nullable。
private int? getNum = null;
private Nullable<int> getNumNull = null;

二、三元运算符(?:)

需要if语句来判断,当Request.Params["para"]不为null时,取出para的值。

string strParam =Request.Params["para"];  
if ( strParam== null )  
 {  
    strParam= "";  
 }

用三元运算符?简化写法,取出para的值。

string strParam=Request.Params["para"] == null ? "":Request.Params["para"];

三、null合并运算符(??)

?? 运算符称为“ null 合并运算符”,用于定义可以为 null 值的类型和引用类型的默认值。合并运算符为类型转换定义了一个预设值,以防可空类型的值为Null。

如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。

int? x = null;//定义可空类型变量
int? y = x ?? 1000;//使用合并运算符,当变量x为null时,预设赋值1000
Console.WriteLine(y.ToString()); //1000

null 合并运算符为结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(bb??cc)”计算。

如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 ?? 运算符,则会生成编译时错误。如果使用强制转换,且当前还未定义可以为 null 值的类型,则会引发InvalidOperationException 异常。

//A.定义getNum为null,输出结果为0
private int? getNum = null;
Console.WriteLine(getNum ?? 0);

//B.定义getNum为1,输出结果为1
 private int getNum = 1;
 Console.WriteLine(getNum ?? 0);

四、NULL条件运算符(?.) 

在C# 6.0中,引入了一个 ?. 的运算符。

如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL

void Main()
{

    //首先我们定义全局变量Person对象,有可能p为null的情况下取值。
    Person p = null;
    string telePhoneNo = string.Empty;  //定义telePhoneNo 

    //取Person的telePhoneNo 
    //A.初始写法,if条件判断
    if (p != null)
    {
        if (p.Secret != null)
        {
            telePhoneNo = p.Secret.TelePhoneNo;
        }
    }

    //B.三元运算符写法,单问号?
    telePhoneNo = p != null ? (p.Secret != null ? p.Secret.TelePhoneNo : "") : "";

    //C. NULL检查运算符?.
    telePhoneNo = p?.Secret?.TelePhoneNo ?? "";
    Console.Write(telePhoneNo);
}

public class SecretByMySelf
{
    public string Password { get; set; }
    public string TelePhoneNo { get; set; }
}

public class Person
{
    public string Name { get; set; }
    public SecretByMySelf Secret { get; set; }
}

五、?[]"运算符:

用于在执行成员访问 (?.) 或索引 (?[) 操作之前,测试是否存在 NULL。 这些运算符可帮助编写更少的代码来处理 null 检查,尤其是对于下降到数据结构。

int? count = customers?[0]?.Orders?.Count(); 
 // null if customers, the first customer, or Orders is null

到此这篇关于C#中单问号(?)和双问号(??)的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C#控件编程之文本框(TextBox)的使用

    C#控件编程之文本框(TextBox)的使用

    这篇文章主要介绍了C#控件编程之文本框(TextBox)的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • C#中的ICustomFormatter及IFormatProvider接口用法揭秘

    C#中的ICustomFormatter及IFormatProvider接口用法揭秘

    这篇文章主要介绍了C#中的ICustomFormatter及IFormatProvider接口用法揭秘,本文能过分析一段代码得出一些研究结果,需要的朋友可以参考下
    2015-06-06
  • 使用C#实现阿拉伯数字到大写中文的转换

    使用C#实现阿拉伯数字到大写中文的转换

    这篇文章主要介绍了C#实现阿拉伯数字转为大写中文的实现代码,需要的朋友可以参考下
    2007-03-03
  • C#中Request.Cookies 和 Response.Cookies 的区别分析

    C#中Request.Cookies 和 Response.Cookies 的区别分析

    本文通过实例代码向我们展示了C#中Request.Cookies 和 Response.Cookies 的区别,文章浅显易懂,这里推荐给大家。
    2014-11-11
  • C# 结合 Javascript 测试获取天气信息

    C# 结合 Javascript 测试获取天气信息

    本文将介绍如何使用 C# 并结合 JavaScript 获取天气信息,获取的数据来源于360浏览器首页数据,对C# 获取天气信息示例代码感兴趣的朋友一起看看吧
    2024-08-08
  • C#备份文件夹的两种方法

    C#备份文件夹的两种方法

    在C#编程中,文件夹操作是不可或缺的一部分,它允许开发者创建、删除、移动和管理文件系统中的目录结构,本文给大家介绍了C#备份文件夹的两种方法,需要的朋友可以参考下
    2024-12-12
  • C# 动态加载程序集信息

    C# 动态加载程序集信息

    在设计模式的策略模式中,需要动态加载程序集信息,本文通过一个简单的实例,来讲解动态加载Dll需要的知识点。下面跟着小编一起来看下吧
    2017-03-03
  • C# 泛型集合类List<T>使用总结

    C# 泛型集合类List<T>使用总结

    本文主要主要介绍了C# 泛型集合类List<T>使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2022-05-05
  • C#如何通过匿名类直接使用访问JSON数据详解

    C#如何通过匿名类直接使用访问JSON数据详解

    这篇文章主要给大家介绍了关于C#如何通过匿名类直接使用访问JSON数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。
    2018-02-02
  • 浅谈static a[n*m]={0};中static的作用

    浅谈static a[n*m]={0};中static的作用

    下面小编就为大家带来一篇浅谈static a[n*m]={0};中static的作用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论