2010-05-14 13 views
9

¿Puede alguien darme una lista, o señalarme dónde puedo encontrar una lista de tipos de datos C# que pueden ser de tipo anulable?¿Qué tipos de datos de C# pueden ser tipos anulables?

Por ejemplo:

  • sé que está bien Nullable<int>
  • Sé que no es Nullable<byte[]>.

Me gustaría saber qué tipos son anulables y cuáles no. Por cierto, sé que puedo probar esto en tiempo de ejecución. Sin embargo, esto es para un generador de código que estamos escribiendo, por lo que no tengo un tipo real. Solo sé que una columna es string o int32 (etc.).

+1

'' anulable No es buena porque las matrices son los tipos de referencia (incluso si el tipo que contienen es un tipo de valor). Tenga en cuenta que esto significa que puede hacer 'byte [] b = null'. – fearofawhackplanet

Respuesta

20

Todos los tipos de valores (excepto Nullable<T> en sí) se pueden usar en tipos anulables, es decir, todos los tipos que se derivan de System.ValueType (que también incluye enum s).

La razón de esto es que Nullable se declara algo como esto:

struct Nullable<T> where T : struct, new() { … } 
+3

@OP: ... porque el objetivo es solucionar el problema (lo llamaría un error de diseño importante, mientras que otros estarían en desacuerdo) con tipos de valores que no pueden contener nulos. (http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx) ¡Y seguro que no ayudaron a nada al llamarlo 'Nullable'!Por cosas exactamente como tu pregunta "¿Qué tipos son anulables?" Respuesta: Los tipos de referencia son anulables. Los tipos de valores son compatibles con 'Nullable', que es lo contrario. * suspiro * ;-) –

+2

@TJCrowder: Yo, por mi parte, estaría en desacuerdo ... –

+4

Minit nitpick: Todos los tipos de valor * excepto * el tipo Nullable en sí. es decir, el follwoing no es válido: var i = new Nullable >(); –

1

Puede ser cualquier tipo de valor que incluye estructura, no puede ser de un tipo de referencia, como los que ya son intrínsecamente contener nulos.

Sí: Int32 doble DateTime CustomStruct etc.

No: cadena matriz CustomClass etc.

Para obtener más información, consulte MSDN: http://msdn.microsoft.com/en-us/library/2cf62fcy(v=VS.80).aspx

+0

"Puede ser cualquier tipo de valor, incluyendo struct" - bueno, a excepción del 50% de las estructuras disponibles que son 'Nullable '; p –

2

Un tipo se dice que es nulable si se le puede asignar un valor o se le puede asignar un valor nulo, lo cual significa que el tipo no tiene valor alguno. En consecuencia, un tipo que admite nulos puede expresar un valor, o que no existe ningún valor. Por ejemplo, un tipo de referencia como String es anulable, mientras que un tipo de valor como Int32 no lo es. Un tipo de valor no puede ser anulado porque tiene suficiente capacidad para expresar solo los valores apropiados para ese tipo; no tiene la capacidad adicional requerida para expresar un valor de nulo.

La estructura Nullable admite utilizar únicamente un tipo de valor como tipo anulable porque los tipos de referencia son anulables por diseño.

La clase Nullable proporciona compatibilidad complementaria para la estructura Nullable. La clase Nullable admite la obtención del tipo subyacente de un tipo anulable y las operaciones de comparación e igualdad en pares de tipos anulables cuyo tipo de valor subyacente no admite operaciones genéricas de comparación e igualdad.

De Ayuda Docs http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

Cuestiones relacionadas