2010-12-20 10 views
34
struct AccountInfo 
{ 
    String Username; 
    String Password; 
} 

ahora si quiero tener una instancia Nullable que debería escribir:¿Cómo hacer una 'struct' Nullable por definición?

Nullable<AccountInfo> myAccount = null; 

Pero yo quiero hacer el structNullable por naturaleza y que puede ser utilizado como esto (sin el uso de Nullable<T>):

AccountInfo myAccount = null; 
+9

¿Es una clase? – Shurdoof

+3

Estaba pensando con solo dos miembros, sería una clase divertida Me avergonzó que alguien revisara mi código :) – Xaqron

+1

Una estructura mutable es mucho más problemática que una clase con solo dos miembros. –

Respuesta

42

No puede. Struct se consideran tipos de valor y, por definición, no pueden ser nulos. La forma más fácil de hacerlo es nullable es hacer que sea un tipo de referencia.

La respuesta que debes hacerte es "¿Por qué es esto una estructura?" y a menos que puedas pensar en una razón realmente sólida, no lo hagas, y haz que sea una clase. El argumento de que una estructura es "más rápida" es realmente exagerado, ya que las estructuras no se crean necesariamente en la pila (no se debe confiar en esto), y la velocidad "obtenida" varía caso por caso.

Vea el post de Eric Lippert en el debate de clase vs. estructura y velocidad.

14

La respuesta corta: hazla una clase.

La respuesta larga: Esta estructura es mutable, la cual estructura nunca debe ser, no representa un solo valor que las estructuras siempre deben tener, y no tiene un valor "cero" sensible que las estructuras también deben siempre, por lo que probablemente no debería ser un tipo de valor Convertirlo en una clase (tipo de referencia) significa que siempre es posible que sea nulo.


Nota: El uso de palabras como "nunca" y "siempre" debe tomarse con un "casi" implícito.

+1

+1 para la nota – Dlongnecker

25

Cuando lo declara, declararlo con un "?" si prefiere

AccountInfo? myAccount = null;

+7

Eso no lo "define". Eso lo está declarando. –

+3

+1 para hacer 'Nullabe ' más corto y también ... – Xaqron