欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 新特性 操作符单?与??和 ?. 的使用

程序员文章站 2022-05-27 20:27:00
1.单问号(?) 1.1 单问号运算符可以表示:可为Null类型,C#2.0里面实现了Nullable数据类型 //A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成int,因为后者是不可以为null的值类型。 private int getNum = null; / ......

1.单问号(?)

1.1 单问号运算符可以表示:可为null类型,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;

2.双问号(??)

?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。

//a.定义getnum为null,输出结果为0
private int? getnum = null;
console.writeline(getnum ?? 0);

//b.定义getnum为1,输出结果为1
private int getnum = 1;
console.writeline(getnum ?? 0);

3. ?.如果为空不报错误,不为空原值输出

using system;
using system.collections.generic;
using system.linq;
using system.linq.expressions;
using system.text;
using system.threading;
using system.threading.tasks;

namespace consoleapp2
{
    class program
    {
        static void main(string[] args)
        {
            myfun(null); // 123
            myfun("456");//  456

            person persona = new person() { name = "chenyishi" };
            console.writeline(persona?.name);

            persona = null;
            console.writeline(persona?.name);//person==null,仍不会报错
        }


        static void myfun(string arga)
        {
            console.writeline(arga ?? "123"); //arga==null,则输出123
        }
    }

    class person
    {
        public string name { get; set; }
    }
}

原文:

https://www.cnblogs.com/appleyrx520/p/7018610.html

https://www.cnblogs.com/chenyishi/p/8329752.html