在 Null-coalescing assignmentmen C# 中分配空值

Posted

技术标签:

【中文标题】在 Null-coalescing assignmentmen C# 中分配空值【英文标题】:assigned null value in Null-coalescing assignmen C# 【发布时间】:2022-01-14 21:22:21 【问题描述】:

如果短语 ?? C#中的=是赋值为null,那么为什么在这个例子中赋值呢?

IList<string> list = new List<string>() "cat" , "book" ;

(list ??= new List<string>()).Add("test");

foreach (var item in list)

    Console.WriteLine($"list ??= item");

【问题讨论】:

【参考方案1】:

正如Microsoft Docs 所说:

null 合并赋值运算符 ??= 仅当左侧操作数的计算结果为 null 时,才将其右侧操作数的值分配给其左侧操作数。如果左侧操作数的计算结果为非 null,则 ??= 运算符不会计算其右侧操作数。

您的list 不为空,这就是??= 不分配新的List 的原因。

【讨论】:

【参考方案2】:

您误解了运营商。它不是用于分配空值。相反,它会检查 null,如果检查的变量为 null,它会分配右侧的值。

为了更好地可视化正在发生的事情,写出空合并运算符的简写版本会有所帮助:

(list = list ?? new List<string>()).Add("test");

在上面,它检查列表是否不为空,如果不为空,则将list 变量分配给当前list 变量,最后,将“Test”添加到集合中。

由于您的列表已在上面初始化,因此无需分配新列表。

【讨论】:

以上是关于在 Null-coalescing assignmentmen C# 中分配空值的主要内容,如果未能解决你的问题,请参考以下文章

csharp 使用null-coalescing运算符的示例。

Null-coalescing out 参数给出意外警告

??或 .GetValueOrDefault() [关闭]

CSC72002 Object Oriented Programming

Python基础

[转]MySQL-5.7 Update语句详解