0

如果这句话??= 在 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}");
}

4

2 回答 2

2

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

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

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

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

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

于 2021-12-10T05:46:58.833 回答
0

正如Microsoft Docs所说:

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

list不为空,这就是为什么??=不分配 new List

于 2021-12-10T05:48:47.160 回答