Quelle est la différence entre le type? et Nullable<type>?
En C# sont les nullable types primitifs (c'est à dire bool?
) des alias pour leur correspondant Nullable<T>
type ou est-il une différence entre les deux?
- Cette question doit être modifiée de façon à préciser le nom de la primitive de type "bool?" et pas "bool". Il y a des bonnes réponses ci-dessous, mais la question n'est pas claire.
- J'ai eu une question similaire concernant
int?
etNullable<int>
et trouve cette question (et sa réponse) pour être très utile. - veuillez consulter la stackoverflow.com/questions/4028830/...
Vous devez vous connecter pour publier un commentaire.
Si vous regardez le IL aide Ildasm, vous verrez que ils compiler vers le bas pour
Nullable<bool>
.Il n'y a pas de différence entre
bool? b = null
etNullable<bool> b = null
. Le?
est juste compilateur C# syntaxe de sucre.Pour accéder à la valeur du booléen? vous devez faire ce qui suit:
Remarque vous ne pouvez pas tout:
Je suis surpris que personne n'est allé à la source (le C# spec) pour le moment. De §4.1.10 types Nullables:
Alors, non, il n'y a pas de différence entre les deux formes. (En supposant que vous n'avez pas de n'importe quel autre type appelé
Nullable<T>
dans tous les espaces de noms que vous utilisez.)Un
Nullable<T>
est une structure composée d'un T et un peu de drapeau indiquant si le T est valide. UnNullable<bool>
a trois valeurs possibles: true, false et null.Edit: Ah, j'ai raté le fait que le point d'interrogation après "bool", était en fait une partie du nom du type et n'est pas un indicateur que vous avez été à poser une question :). La réponse à votre question, alors, est "oui, le C#
bool?
est juste un alias pourNullable<bool>
".Un
bool
est un type de valeur, donc il ne peut pas contenir une valeur NULL. Si vous encapsuler n'importe quel type de valeur avecNullable<>
, il va lui donner cette possibilité. En outre, les méthodes d'accès à la modification de la valeur par des propriétés supplémentairesHasValue
etValue
.Mais à la question:
Nullable<bool>
etbool?
sont des alias.Non il n'y a pas de différence. En résumé:
Système.Boolean -> valeurs valides : vrai, faux
bool -> alias pour le Système.Boolean
Nullable<bool> -> valeurs valides : true, false, null
bool? -> alias pour les valeurs null<bool>
Espère que cette aide.
Null primitives sont de simples primitives enveloppé dans Nullable. Toutes les apparences contraires sont juste le compilateur et syntaxique de sucre.
Pas de différence. Jetez un oeil ici: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
"La syntaxe T? est une abréviation de " Nullable, où T est un type valeur. Les deux formes sont interchangeables."