Possible Duplicate:
What is the “??” operator for?
What does the "??" operator perform in an expression ?
public NameValueCollection Metadata
{
get { return metadata ?? (metadata = new NameValueCollection()); }
}
Possible Duplicate:
What is the “??” operator for?
What does the "??" operator perform in an expression ?
public NameValueCollection Metadata
{
get { return metadata ?? (metadata = new NameValueCollection()); }
}
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.
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;
}
}
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");
}
}
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?
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.