??
运算符称作 null 合并运算符。 如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。
备注
可以为 null 的类型可以表示类型的域中的值,或者值可以是未定义的(在这种情况下,值为 null)。 当左操作数具有一个值为 null 的可以为 null 的类型时,可以使用 ??
运算符的语法表现力来返回适当的值(右操作数)。 如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 ??
运算符,则会生成编译时错误。 如果使用强制转换,且当前未定义可以为 null 值的类型,则会引发 InvalidOperationException
异常。
有关详细信息,请参阅可以为 null 的类型。
?? 的结果 不能将运算符视为常量,即使其两个参数都是常量。
示例
C# 复制
class NullCoalesce
{
static int? GetNullableInt()
{
return null;
}
static string GetStringValue()
{
return null;
}
static void Main()
{
int? x = null;
// Set y to the value of x if x is NOT null; otherwise,
// if x = null, set y to -1.
int y = x ?? -1;
// Assign i to return value of the method if the method's result
// is NOT null; otherwise, if the result is null, set i to the
// default value of int.
int i = GetNullableInt() ?? default(int);
string s = GetStringValue();
// Display the value of s if s is NOT null; otherwise,
// display the string "Unspecified".
Console.WriteLine(s ?? "Unspecified");
}
}
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/null-conditional-operator