??运算符(C# 参考)

?? 运算符调用 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()
    {
        // ?? operator example.
        int? x = null;

        // y = x, unless x is null, in which case y = -1.
        int y = x ?? -1;

        // Assign i to return value of method, unless
        // return value is null, in which case assign
        // default value of int to i.
        int i = GetNullableInt() ?? default(int);

        string s = GetStringValue();
        // ?? also works with reference types. 
        // Display contents of s, unless s is null, 
        // in which case display "Unspecified".
        Console.WriteLine(s ?? "Unspecified");
    }
}

请参见

参考

C# 运算符

可以为 null 的类型(C# 编程指南)

概念

C# 编程指南

其他资源

C# 参考

“Lifted 正确意味着什么?