???? 演算子 (C# リファレンス)Operator (C# Reference)

?? 演算子は、null 合体演算子と呼ばれます。The ?? operator is called the null-coalescing operator. 左側のオペランドが null 値でない場合には左側のオペランドを返し、null 値である場合には右側のオペランドを返します。It returns the left-hand operand if the operand is not null; otherwise it returns the right hand operand.

コメントRemarks

null 許容型は、型のドメインの値を表すことができ、値は未定義でもかまいません (その場合、値は null になります)。A nullable type can represent a value from the type’s domain, or the value can be undefined (in which case the value is null). ?? 演算子の構文を使用して、左側のオペランドが null 許容型でその値が null である場合に、適切な値 (右側のオペランド) を返すことができます。You can use the ?? operator’s syntactic expressiveness to return an appropriate value (the right hand operand) when the left operand has a nullable type whose value is null. ?? 演算子を使用せずに、null 非許容値型に対して null 許容値型を割り当てると、コンパイル時にエラーが発生します。If you try to assign a nullable value type to a non-nullable value type without using the ?? operator, you will generate a compile-time error. null 許容値型が定義されていない場合にキャストを使用すると、InvalidOperationException 例外がスローされます。If you use a cast, and the nullable value type is currently undefined, an InvalidOperationException exception will be thrown.

詳細については、「ull 許容型」を参照してください。For more information, see Nullable Types.

?? の結果は、The result of a ?? たとえ両方の引数が定数であった場合でも、定数とは見なされません。operator is not considered to be a constant even if both its arguments are constants.

Example

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");
    }
}

関連項目See Also

C# リファレンスC# Reference
C# プログラミング ガイドC# Programming Guide
C# 演算子C# Operators
Null 許容型Nullable Types
'Lifted' の正確な意味What Exactly Does 'Lifted' mean?