在 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运算符的示例。