C#语法糖空合并运算符??和空合并赋值运算符 ??=

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#语法糖空合并运算符??和空合并赋值运算符 ??=相关的知识,希望对你有一定的参考价值。

例子

比如说:我们有一个UserInformation类

public class UserInformation
     
        public string Name  get; set; 
        public List<string> Address  get; set; 
    

有下面一段代码,我们获取张三的第一个地址,如果地址为空,则返回上海市,常规做法如下

static void Main(string[] args)
        
            UserInformation user = new UserInformation();
            user.Name = "张三";
            user.Address = null;
            string address = user.Address?.First();
            if (address == null)
            
                address = "上海市";
            
        

于是微软的工程师觉得我们既然可以使用?.优化属性这种类型判空,那我们能不能判断当计算结果为空时,给他进行赋值呢?于是微软工程师说干就干,所以空合并运算符就应运而生了,我们的代码就变成了

static void Main(string[] args)
        
            UserInformation user = new UserInformation();
            user.Name = "张三";
            user.Address = null;
            string address = user.Address?.First()??"上海市";
        

当然有的小伙伴就说了,这样好像不太满足一种情况,比如说当我们的Address为空时,怎么给User.address赋值呢?,还是只能写成这种模式,治标不治本。

UserInformation user = new UserInformation();
            user.Name = "张三";
            user.Address = null;
            if (user.Address == null)
            
                user.Address= new List<string>  "上海市" ;
            

于是微软工程师觉得你小瞧我,说我治标不治本,那我不服,我必须要搞一个空合并赋值运算符,于是这个代码就变成了

static void Main(string[] args)
        
            UserInformation user = new UserInformation();
            user.Name = "张三";
            user.Address = null;
            user.Address??= new List<string>  "上海市" ;
        

今天的介绍就到此结束了,

最后大家如果喜欢我的文章,还麻烦给个关注并点个赞, 希望net生态圈越来越好!

以上是关于C#语法糖空合并运算符??和空合并赋值运算符 ??=的主要内容,如果未能解决你的问题,请参考以下文章

来自'??' 的 C# 类型推断(“var”)赋值空合并运算符

ES11(2020)可选链操作符和空值合并运算符

ES11(2020)可选链操作符和空值合并运算符

是否有 C# 空合并运算符的 Python 等效项?

合并运算符

JavaScript进阶(十三)JavaScript 空值合并运算符可选链操作符空值赋值运算符讲解