2010-10-05 9 views
6

Duplicar posible:
What is the “??” operator for?¿Qué es el uso de "??"

Favor explicar lo que es el uso de "??" en el siguiente código y qué es "??" usado para.

if ((this.OrderDate ?? DateTime.MinValue) > DateTime.Today) 

{ e.Description = "la fecha del pedido no debe estar en el futuro."; devuelve falso; }

el código anterior es en http://nettiers.com/EntityLayer.ashx

Gracias.

+3

'' ??, como tal, podría ser difícil de buscar, pero la búsqueda de La "sintaxis de C#" o los "operadores de C#" lo llevan rápidamente a las respuestas. –

Respuesta

9

(Este es un duplicado, pero es difícil de buscar, así que estoy bastante feliz para proporcionar más otro objetivo para futuras búsquedas ...)

Es la null-coalescing operator. Esencialmente evalúa el primer operando, y si el resultado es nulo (ya sea una referencia nula o el valor nulo para un tipo de valor que admite nulos), entonces evalúa el segundo operando. El resultado es el operando que fue evaluado por última vez, efectivamente.

Tenga en cuenta que debido a su asociatividad, se puede escribir:

int? x = E1 ?? E2 ?? E3 ?? E4; 

si E1, E2, E3 y E4 son todas las expresiones de tipo int? - se iniciará con E1 y el progreso hasta que encuentra un no valor nulo.

El primer operando debe ser un tipo anulable, pero el segundo operando no puede contener nulos, en cuyo caso el tipo de expresión general no admite nulos. Por ejemplo, supongamos E4 es una expresión de tipo int (pero todo el resto está siendo int? entonces puede hacer x no anulable:

int x = E1 ?? E2 ?? E3 ?? E4; 
+0

realmente útil saber: ¿funciona en la mayoría de los lenguajes de programación? –

+0

@Thomas: No, solo C# hasta donde yo sé. VB puede tener algo similar, y algunos otros lenguajes tienen null-safe deferencing. –

+0

@Thomas Clayson: Un operador nulo-coalescente existe básicamente en [C# y Perl] (http://en.wikipedia.org/wiki/Null_coalescing_operator) a partir de la versión 5.10 (La sintaxis de Perl es '//'). –

Cuestiones relacionadas