在 Null-coalescing assignmen C# 中分配空值
assigned null value in Null-coalescing assignmen C#
如果短语?? =在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}");
}
你误会接线员了。它不是用于分配空值。相反,它会检查 null,如果检查的变量为 null,它会分配右边的值。
为了更好地可视化正在发生的事情,写出空合并运算符的普通版本会有所帮助:
(list = list ?? new List<string>()).Add("test");
在上面,它检查 list 是否不为空,如果不是,则将 list
变量分配给当前 list
变量,最后,然后添加“测试" 到 collection.
由于您的列表已在上面初始化,因此无需分配新列表。
正如Microsoft Docs所说:
the null-coalescing assignment operator ??= assigns the value of its right-hand operand to its left-hand operand only if the left-hand operand evaluates to null. The ??= operator doesn't evaluate its right-hand operand if the left-hand operand evaluates to non-null.
您的 list
不为空,这就是 ??=
不分配新的 List
的原因。
如果短语?? =在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}");
}
你误会接线员了。它不是用于分配空值。相反,它会检查 null,如果检查的变量为 null,它会分配右边的值。
为了更好地可视化正在发生的事情,写出空合并运算符的普通版本会有所帮助:
(list = list ?? new List<string>()).Add("test");
在上面,它检查 list 是否不为空,如果不是,则将 list
变量分配给当前 list
变量,最后,然后添加“测试" 到 collection.
由于您的列表已在上面初始化,因此无需分配新列表。
正如Microsoft Docs所说:
the null-coalescing assignment operator ??= assigns the value of its right-hand operand to its left-hand operand only if the left-hand operand evaluates to null. The ??= operator doesn't evaluate its right-hand operand if the left-hand operand evaluates to non-null.
您的 list
不为空,这就是 ??=
不分配新的 List
的原因。