104 out of 114 rated this helpful - Rate this topic

?? Operator (C# Reference)

The ?? operator returns the left-hand operand if it is not null, or else it returns the right operand.

A nullable type can contain a value, or it can be undefined. The ?? operator defines the default value to be returned when a nullable type is assigned to a non-nullable type. If you try to assign a nullable type to a non-nullable type without using the ?? operator, you will generate a compile-time error. If you use a cast, and the nullable type is currently undefined, an InvalidOperationException exception will be thrown.

For more information, see Nullable Types (C# Programming Guide).

// nullable_type_operator.cs
using System;
class MainClass
{
    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");
    }
}
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
int? x; What does the ? mean.
The ? in
 int? x;
 is similar to VB.Net's
Dim x as Nullable(Of Integer)
? is called nullable Type
you can not assign null value to any integer variable, as by default integer type variables are not nullable integer.

see you can use below snippet only if you have used int? x = null else even u cant declare a variable like int x = null

int? x = null;
int y;
y = x??-1;
Is that a typo?
This compiles, but I'm not sure what the question mark does in this case:

int? x = null;

The question mark declares x as a nullable int, which is why you can initialise it to null.

(see also http://msdn.microsoft.com/en-us/library/1t3y8s4s(VS.80).aspx)