19

Possible Duplicate:
What is the “??” operator for?

What does the "??" operator perform in an expression ?

public NameValueCollection Metadata
{
    get { return metadata ?? (metadata = new NameValueCollection()); }
}
Community
  • 1
  • 1
Emily
  • 193
  • 1
  • 1
  • 5

7 Answers7

33

This is known as null-coalescing operator and it acts as following, assume a is a nullable int and b is a normal int

b = a ?? 1;

is equal to

b = (a != null ? (int)a : 1);

which is equal to

if(a != null)
    b = (int)a;
else
    b = 1;

Therefore

public NameValueCollection Metadata
{
    get { return metadata ?? (metadata = new NameValueCollection()); }
}

expanded should look like something like this

public NameValueCollection Metadata
{
    get
    {
        if(metadata == null)
            return (metadata = new NameValueCollection());
        else
            return metadata;
    }
}

which is some kind of a one liner singleton pattern, because the getter returns metadata (an initialized NameValueCollection object) every time its requested, expect the very first time which it's null at that point, so it initializes it and then returns it. This is off topic but note that this approach to singleton pattern is not thread-safe.

Hamid Nazari
  • 3,905
  • 2
  • 28
  • 31
5

?? Operator (C# Reference)

The ?? operator is called the null-coalescing operator and is used to define a default value for a nullable value types as well as reference types. It returns the left-hand operand if it is not null; otherwise it returns the right operand.

Your example can be re-written as:

public NameValueCollection Metadata
  {
    get { 
          if (metadata == null)
              metadata = new NameValueCollection();

          return metadata;
         }
  }
Metro Smurf
  • 37,266
  • 20
  • 108
  • 140
2

From MSDN: http://msdn.microsoft.com/en-us/library/ms173224.aspx

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 value type to a non-nullable value type without using the ?? operator, you will generate a compile-time error. If you use a cast, and the nullable value type is currently undefined, an InvalidOperationException exception will be thrown.

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

}

Chris Kooken
  • 32,730
  • 15
  • 85
  • 123
1

This is used to substitute default value in case of NULL variable.

X =  (if Y is not null return Y) ?? (else return DEFAULT)

Read detailed discussion at How useful is C#'s ?? operator?

Community
  • 1
  • 1
ankitjaininfo
  • 11,961
  • 7
  • 52
  • 75
0

This is the coalesce operator, it checks for null.

statement ?? fallback if statement evaluates to null, fallback is used. See msdn.

Femaref
  • 60,705
  • 7
  • 138
  • 176
0

The ?? operator is called the null-coalescing operator and is used to define a default value for a nullable value types as well as reference types. It returns the left-hand operand if it is not null; otherwise it returns the right operand.

http://msdn.microsoft.com/en-us/library/ms173224.aspx

John Myczek
  • 12,076
  • 4
  • 31
  • 44
-2

?? is the null coalescing operator

Read about it here: link text

JP.
  • 5,536
  • 7
  • 58
  • 100