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 ?

Était-ce utile?

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. »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top