2010-05-19 13 views
11

¿Qué significa ?:Tipo de variable que termina con?

public bool? Verbose { get; set; } 

Cuando se aplica a string?, hay un error:

The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable'

+3

Solo para agregar a las otras respuestas que describen tipos anulables: un bool se almacena en la memoria como 0 o 1, no hay otra opción. Al convertirlo en un tipo que admite nulos, asigna un área más grande de memoria donde su valor puede ser verdadero, falso o nulo. Notarás que ahora puedes hacer cosas como Verbose.HasValue que no podrías hacer si se definió como un bool. –

+0

También para agregar a la conversación general, todos los tipos de referencia son anulables por defecto (I.E. puede establecerlos todos como nulos), por lo que el tipo Nullable está diseñado para no aceptarlos, ya que duplicaría la funcionalidad y complicaría las cosas. – Rangoric

+1

posible duplicado de [¿Qué significa "DateTime?" significa en C#?] (http://stackoverflow.com/questions/109859/what-does-datetime-mean-in-c) –

Respuesta

18

? hace que sus tipos (valor) no anulable contener nulos. No funciona para string, ya que es un tipo de referencia y, por lo tanto, se puede anular de manera predeterminada.

De MSDN, sobre los tipos de valor:

Unlike reference types, a value type cannot contain the null value. However, the nullable types feature does allow for values types to be assigned to null.

? es básicamente una forma abreviada de Nullable<T> structure.

Si quiere saber más, MSDN tiene un great article con respecto a este tema.

7

bool? es una forma abreviada de System.Nullable<bool>. Solo se aceptan tipos de valores para el parámetro de tipo y no para los tipos de referencia (como, por ejemplo, cadena).

5

bool? es una notación abreviada de Nullable<bool>. En general, the documentation afirma:

The syntax T? is shorthand for Nullable, where T is a value type. The two forms are interchangeable

Desde string no es un value type (es un reference type), no se puede utilizar como parámetro genérico para Nullable<T>.

11

El ? es la abreviatura de la estructura a continuación:

struct Nullable<T> 
{ 
    public bool HasValue; 
    public T Value; 
} 

Puede utilizar esta estructura directamente, pero el ? es la sintaxis de acceso directo para hacer que el código resultante mucho más limpio. En lugar de escribir:

Nullable<int> x = new Nullable<int>(125); 

su lugar, puede escribir:

int? x = 125; 

Esto no funciona con una cuerda, como una cadena es un tipo de referencia y no un tipo de valor.

3

¿El? El operador indica que la propiedad es de hecho un tipo que admite nulos.

public bool? Verbose { get; set; } 

se equilvalent a

public Nullable<bool> Verbose { get; set; } 

Un tipo anulable es un tipo especial introducido en C# 2.0, que acepta un tipo de valor como un tipo praramater genérico y permite valores nulos a ser asignados al tipo.

El tipo anulable solo acepta tipos de valores como argumentos genéricos, ¿por qué obtienes un error de compilación cuando intentas usar? operador en conjunto con el tipo de cuerda.

Para más información: MSDN Nullable Types

3

tipos de valor Sólo se pueden declarar como anulable. Los tipos de referencia son anulables por defecto. Por lo tanto, no puede hacer cadenas anulables ya que la cadena es un tipo de referencia.

3

la ? significa que su tipo de valor puede tener un valor nulo, especialmente en el caso de la base de datos

manejo que necesita estos nullables para comprobar si un valor es nulo o no.

Se puede aplicar solo a los tipos de valores porque los tipos de referencia pueden ser nulos.

Cuestiones relacionadas