web-dev-qa-db-fra.com

Comment rendre un 'struct' Nullable par définition?

struct AccountInfo
{
   String Username;
   String Password;
}

maintenant si je veux avoir une instance Nullable je devrais écrire:

Nullable<AccountInfo> myAccount = null;

Mais je veux faire le structNullable par nature et il peut être utilisé comme ceci (sans utiliser de Nullable<T>):

AccountInfo myAccount = null;
47
Xaqron

Tu ne peux pas. Les structures sont considérées comme des types de valeur et, par définition, ne peuvent pas être nulles. Le moyen le plus simple de le faire nullable est d'en faire un type de référence.

La réponse que vous devez vous poser est "Pourquoi est-ce une structure?" et à moins que vous ne puissiez penser à une raison vraiment solide, ne le faites pas et faites-en un cours. L'argument selon lequel une structure est "plus rapide", est vraiment exagéré, car les structures ne sont pas nécessairement créées sur la pile (vous ne devriez pas vous fier à cela), et la vitesse "gagnée" varie au cas par cas.

Voir le post par Eric Lippert sur le débat classe/structure et la vitesse.

52
kemiller2002

Lorsque vous le déclarez, déclarez-le avec un "?" si tu préfères

AccountInfo? myAccount = null;
44
Dlongnecker

La réponse courte: faites-en une classe.

La réponse longue: cette structure est modifiable, les structures ne devraient jamais être, ne représente pas une valeur unique que les structures devraient toujours, et n'a pas de valeur "zéro" sensible que les structures devraient également toujours, donc ce ne devrait probablement pas être un type de valeur . En faire une classe (type de référence) signifie qu'il est toujours possible qu'elle soit nulle.


Remarque: L'utilisation de mots tels que "jamais" et "toujours" doit être prise avec un "presque" implicite.

17
Greg Beech