Null合并赋值
在C#8.0中,引入了一个新的运算符??=
,即“Null-coalescing assignment”(空合并赋值)运算符。这个运算符可以用来在左操作数为null时,将右操作数的值赋值给左操作数。下面我们来详细介绍这个运算符的使用和功能。
# 语法
left ??= right;
这个运算符的语法非常简单,左操作数表示要赋值的变量,右操作数表示变量的默认值。如果左操作数为null,则将右操作数的值赋值给左操作数。
# 示例
下面我们通过几个示例来展示??=
运算符的用法。
string str1 = null;
string str2 = "默认值";
// 在str1为null时,将str2的值赋值给str1
str1 ??= str2;
Console.WriteLine(str1); // 输出:"默认值"
// 在str1不为null时,不执行赋值操作
str1 ??= "新值";
Console.WriteLine(str1); // 输出:"默认值"
在这个示例中,我们先定义了一个为null的字符串变量str1
,以及一个默认值为“默认值”的字符串变量str2
。然后,我们使用??=
运算符来将str2
的值赋值给str1
。因为str1
为null,所以str2
的值被赋值给str1
。在第二个??=
运算符中,我们尝试将str1
的值改为“新值”,但因为str1
已经被赋值过了,所以这个赋值操作不会执行。
我们还可以使用??=
运算符来为一个对象的属性赋值。
class Person
{
public string Name { get; set; }
}
Person p = new Person();
// 在p的Name属性为null时,将默认值赋值给Name
p.Name ??= "默认值";
Console.WriteLine(p.Name); // 输出:"默认值"
// 在p的Name属性不为null时,不执行赋值操作
p.Name ??= "新值";
Console.WriteLine(p.Name); // 输出:"默认值"
在这个示例中,我们定义了一个名为Person
的类,该类具有一个名为Name
的属性。我们使用??=
运算符为这个属性赋值,如果属性值为null,则将默认值赋值给属性。在第二个??=
运算符中,我们尝试将Name
属性的值更改为“新值”,但因为Name
属性已经被赋值过了,所以这个赋值操作不会执行。
# 总结
??=
运算符是C#8.0中的一个新运算符,用于在左操作数为null时将右操作数的值赋值给左操作数。它可以用于变量和对象的属性,可以提高代码的可读性和
上次更新: 2023/04/26, 22:10:06