2010-01-15 9 views
6

simplemente me encontré con algo de código mientras se trabaja con System.DirectoryServices.AccountManagementEn C#, lo que es el `?` `En el tipo DateTime?`

public DateTime? LastLogon { get; } 

Cuál es el? después del DateTime para.

Encontré una referencia para el ?? Operator (C# Reference), pero no es lo mismo. (280Z28: Aquí está el enlace correcto para Using Nullable Types.)

+1

El enlace en su publicación es en realidad a la ?? operador, que es el operador coalescente nulo no relacionado pero muy bueno. –

+2

Lea la sección 4.1.10 de la especificación C# para más detalles. –

+0

@Charlie: Creo que fue un duplicado en piel de oveja hasta que lo reformulé en el título. –

Respuesta

27

El ? hace que sea un tipo anulable (que es la forma abreviada de la Estructura Nullable<T> y es aplicable a todos los tipos de valor).

Nullable Types (C#)

Nota:

El ?? que vincula a es el operador coalescente nula que es completamente diferente.

+4

Creo que una de las cosas más importantes para señalar aquí es que esto no es especial para el tipo DateTime. Funciona también para int, decimal y otros tipos que normalmente no aceptan nulos, y de la misma manera. –

4

El ? no es un operador en este caso, es parte del tipo. La sintaxis

DateTime? 

es la abreviatura de

Nullable<DateTime> 

por lo que declara que LastLogon es una propiedad que devolverá un Nullable<DateTime>. Para más detalles, vea MSDN.

La ?? a la que linked es algo relevante aquí. Ese es el operador de fusión nula que tiene la siguiente semántica. La expresión

x ?? y 

evalúa a y si es xnull de lo contrario se evalúa a x. Aquí x puede ser un tipo de referencia o un tipo que admite nulo.

0

Es un acceso directo para Nullable<DateTime>. Tenga en cuenta que los métodos que utilizan estos tipos no pueden exponerse a COM ya que son genéricos de uso a pesar de parecer que no lo son.

0

Como otros han mencionado esto? la sintaxis hace que el tipo sea nulo.

Un par de cosas importantes a tener en cuenta cuando se trabaja con tipos anulables (tomado de the docs, pero pensé que sería útil para llamar a cabo aquí):

  • comunmente usa de sólo lectura propiedades Value y HasValue cuando se trabaja con tipos anulables.

e.g.

int? num = null; 
if (num.HasValue == true) 
{ 
    System.Console.WriteLine("num = " + num.Value); 
} 
  • Usted puede utilizar el operador coalescente nula para asignar un valor predeterminado a un tipo anulable. Esto es muy útil.

e.g.

int? x = null; 
int y = x ?? -1; 
0

Como otros han mencionado, ? se utiliza para declaring a value type as nullable.

Esto es grande en un par de situaciones:

  • Al tirar de datos de una base de datos que tiene un valor nulo almacenado en un campo anulable (que se asigna a un tipo de valor .NET)
  • Cuando necesidad de representar "no especificado" o "no encontrado".

Por ejemplo, considere una clase utilizada para representar la opinión de un cliente que se le pidió una serie de preguntas no obligatorias:

class CustomerFeedback 
{ 
    string Name { get; set; } 
    int? Age { get; set; } 
    bool? DrinksRegularly { get; set; } 
} 

El uso de tipos anulables por Age y DrinksRegularly se puede utilizar para indicar que el cliente no respondió estas preguntas.

En el ejemplo que cita, tomaría un valor null para LastLogon para indicar que el usuario nunca ha iniciado sesión.

Cuestiones relacionadas