2011-07-03 16 views
9

Soy nuevo en C#. En C# no puedo establecer el valor de una estructura para anular ¿cómo puedo crear una estructura con soporte de valor nulo?¿Cómo crear una estructura con soporte de valor nulo?

+3

Definitivamente, definitivamente no deberías estar usando una estructura en primer lugar. – SLaks

+0

¿Existe alguna razón convincente para que esto no se pueda definir como una clase? – juharr

Respuesta

14

Estructuras y tipos de valor se pueden hacer anulable utilizando el genérico anulable <> clase para envolverlo. Por ejemplo:

Nullable<int> num1 = null; 

C# proporciona una característica de idioma para esto añadiendo un signo de interrogación después del tipo:

int? num1 = null; 

mismo debería funcionar para cualquier tipo de valor que incluye estructuras.

MSDN Explicación: Nullable Types (c#)

3

puede utilizar Nullable<T> de estructuras, o la forma abreviada de la misma (?):

representa un objeto que tenga como subyacente tipo es un tipo de valor que también puede ser asignados nula como un tipo de referencia .

struct Foo 
{ 
} 

Nullable<Foo> foo2 = null; 
Foo? foo = null; //equivalent shorthand form 
5

Puede utilizar Nullable<T> que tiene un alias en C#. Tenga en cuenta que la estructura en sí no es realmente nula (el compilador trata el nulo de manera diferente detrás de las escenas). Es más un Option type.

Struct? value = null; 

Como @CodeInChaos menciones Nullable<T> solamente es en caja cuando está en un estado que no sea nulo.

Nullable Types

Boxing Nullable Types

+2

'Nullable ' no es solo compilermagic. Es compatible con la magia de CLR también. Por ejemplo, un nulo 'nulo' para el verdadero 'nulo'. – CodesInChaos

2

Dado que la "estructura" no es un tipo de referencia, no se puede asignar "nulo", como de costumbre. por lo que debe usar el siguiente formulario para que sea "anulable"

[Struct Name]? [Nombre de variable] = nulo

por ejemplo.

Color? color = null; 

luego puede asignar null para el objeto y también verificar la nulabilidad usando sentencias condicionales.

Cuestiones relacionadas