51 votes

Y a-t-il une différence entre type ? et Nullable<type> ?

En C#, les types primitifs nullables (i.e. bool? ) ne sont que des alias de leurs Nullable<T> ou existe-t-il une différence entre les deux ?

67voto

Steve Morgan Points 9296

Si vous regardez l'IL en utilisant Ildasme vous constaterez qu'ils se compilent tous les deux en Nullable<bool> .

38voto

samjudson Points 27483

Il n'y a pas de différence entre bool? b = null y Nullable<bool> b = null . En ? n'est qu'un sucre syntaxique du compilateur C#.

18voto

Mark Ingram Points 24995

Pour accéder à la valeur de la variable bool ?, vous devez procéder comme suit :

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}

Remarque : vous ne pouvez pas vous contenter de faire :

if (myValue)
{
  hasValue = true;
}

9voto

svick Points 81772

Je suis surpris que personne ne soit encore allé à la source (la spécification C#). D'après §4.1.10 Nullable types :

Un type nullable s'écrit T ?, où T est le type sous-jacent. Cette syntaxe est une abréviation de System.Nullable<T>, et les deux formes peuvent être utilisées de manière interchangeable.

Donc, non, il n'y a pas de différence entre les deux formes. (En supposant que vous n'ayez pas d'autre type appelé Nullable<T> dans tous les espaces de noms que vous utilisez).

6voto

Curt Hagenlocher Points 12432

A Nullable<T> est une structure composée d'un T et d'un drapeau binaire indiquant si le T est valide ou non. A Nullable<bool> a trois valeurs possibles : true, false et null.

Editer : Ah, j'avais oublié que le point d'interrogation après "bool" faisait en fait partie du nom du type et n'était pas un indicateur que vous posiez une question :). La réponse à votre question est donc "oui, le système C# bool? est juste un alias pour Nullable<bool> ".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X