2010-08-07 13 views

Respuesta

24

Esto se conoce como operador nulo coalescencia y actúa de la siguiente manera, asumir a es un int anulable y b es un int normales

b = a ?? 1; 

es igual a

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

que es igual a

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

Por lo tanto

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

expandido debe ser similar a algo como esto

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

que es una especie de patrón singleton un trazador de líneas, debido a que los rendimientos getter metadata (un objeto NameValueCollection inicializado) cada vez que se solicita, se espera la primera vez que es nulo en ese punto, por lo que se inicializa y luego lo devuelve. Esto está fuera de tema, pero tenga en cuenta que este enfoque del patrón singleton no es seguro para subprocesos.

0

Este es el operador de fusión, verifica nulo.

statement ?? fallback si la afirmación se evalúa como null, se usa fallback. Ver msdn.

-1

?? es el operador coalescente nula

leer sobre ello aquí: link text

+0

Downvote porque ninguna explicación. – problemofficer

4

?? Operator (C# Reference)

El ?? el operador se llama operador nulo-coalescente y se usa para definir un valor predeterminado para los tipos de valores que aceptan nulos , así como los tipos de referencia . Devuelve el operando de la izquierda si no es nulo; de lo contrario, devuelve el operando correcto.

Su ejemplo se puede volver a escribir como:

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

      return metadata; 
     } 
    } 
0

¿El ?? el operador se denomina operador de fusión nula y se usa para definir un valor predeterminado para los tipos de valores que aceptan valores de nulos, así como los tipos de referencia. Devuelve el operando de la izquierda si no es nulo; de lo contrario, devuelve el operando correcto.

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

2

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

Un tipo anulable puede contener un valor, o puede ser definido. Los ?? operator define el valor predeterminado que se devolverá cuando un tipo anulable se asigna a un tipo que no admite nulos. Si intentas asignar un tipo de valor que admite valores NULL a un tipo de valor que no admite nulos sin usar el ?? operador, generará un error en tiempo de compilación. Si utiliza un molde, y el tipo de valor que admite nulos es actualmente indefinido, se lanzará una excepción InvalidOperationException.

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

}

+0

Si va a citar MSDN, proporcione un enlace. – strager