Y a-t-il une différence entre les types ?et Nullable<type> ?
Question
En C# se trouvent les types primitifs nullables (c'est-à-dire bool?
) juste des alias pour leur correspondant Nullable<T>
tapez ou y a-t-il une différence entre les deux ?
La solution
Si vous regardez l'IL en utilisant Ildasme, vous constaterez qu'ils se compilent tous les deux en Nullable<bool>
.
Autres conseils
Il n'y a aucune différence entre bool? b = null
et Nullable<bool> b = null
.Le ?
est juste du sucre de syntaxe du compilateur C#.
Pour accéder à la valeur du bool ?vous devez faire ce qui suit :
bool? myValue = true;
bool hasValue = false;
if (myValue.HasValue && myValue.Value)
{
hasValue = true;
}
Notez que vous ne pouvez pas simplement faire :
if (myValue)
{
hasValue = true;
}
Je suis surpris que personne ne soit encore allé à la source (la spécification C#).À partir du §4.1.10 Types nullables :
Un type nullable s’écrit T ?, où T est le type sous-jacent.Cette syntaxe est un raccourci pour System.Nullable<T> et les deux formes peuvent être utilisées de manière interchangeable.
Donc non, il n’y a aucune différence entre les deux formes.(En supposant que vous n'ayez aucun autre type appelé Nullable<T>
dans l'un des espaces de noms que vous utilisez.)
UN Nullable<T>
est une structure composée d'un T et d'un indicateur binaire indiquant si le T est valide ou non.UN Nullable<bool>
a trois valeurs possibles :vrai, faux et nul.
Modifier: Ah, j'ai raté le fait que le point d'interrogation après "bool" faisait en fait partie du nom du type et non un indicateur que vous posiez une question :).La réponse à votre question est donc "oui, le C# bool?
est juste un pseudonyme pour Nullable<bool>
".
UN bool
est un type valeur, il ne peut donc pas contenir de valeur NULL.Si vous enveloppez un type de valeur avec Nullable<>
, cela lui donnera cette capacité.De plus, les méthodes d'accès à la valeur changent par des propriétés supplémentaires HasValue
et Value
.
Mais à la question : Nullable<bool>
et bool?
sont des pseudonymes.
Non, il n'y a aucune différence.En résumé:
System.Boolean -> valeurs valides :vrai faux
bool -> alias pour System.Boolean
Nullable<bool> -> valeurs valides :vrai, faux, nul
bouffon ?-> alias pour Nullable<bool>
J'espère que cela t'aides.
Les primitives nulles ne sont que des primitives régulières enveloppées dans Nullable.Toute apparence contraire n’est que le compilateur et le sucre syntaxique.
Aucune différence.Jetez un oeil ici: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
« La syntaxe T ?est un raccourci pour Nullable, où T est un type valeur.Les deux formes sont interchangeables. »