.NET, Architecture, ALM, Cloud

Publicité

Les Types nullables

Le fait de ne pas pouvoir affecter la valeur null sur des types valeurs en .NET 1.0 pouvait poser problème. Il est en effet impossible d'affecter la valeur null à un type int par exemple comme suit :

int
number = null;

La solution était tout simplement alors d'affecter par exemple une valeur arbitraire pour désigner la valeur null (int
.MinValue par exemple) ou encore de créer une structure wrapper sur le type pour indiquer via un booléen si le type était null.

C'est ce dernier choix qui a été fait avec l'arrivée de C# 2.0 avec le type Nullable
<T> qui permet donc d'affecter la valeur null sur un type valeur et seulement valeur. En effet, une contrainte sur le type T de la classe Nullable<T> a été placé pour ne pouvoir passer que des types valeurs (un type par référence n'ayant aucune raison d'être géré).

Pour affecter la valeur null sur le type int, nous allons donc avoir :

Nullable
<int> number = null;

A savoir que toujours depuis C# 2.0, l'opérateur "?" placé devant le type valeur va vous permettre de faire appel directement au type Nullable
<T>. Le code peut donc être remplacé par le suivant :

int
? number = null;

Deux moyens seront mis alors à votre disposition pour pouvoir tester la nullité de votre type valeur. Le premier en faisant appel à la propriété "HasValue" et le deuxième en testant tout simplement l'égalité sur null comme suit :

if (!number.HasValue)
  return
;
if (number == null
)
  return
;

Il faut ensuite faire attention à la manipulation de ces types nullables. Il vous sera impossible par exemple d'avoir la ligne de code suivante :

int
number2 = number.Value + 2;

...pour la simple raison que le compilateur ne peut convertir un type int? en int. Deux moyen là encore seront mis à votre disposition. Le premier est de déclarer le type number2 en type nullable :

int
? number2 = number + 2;

Le deuxième est d'utiliser la propriété "Value" du type nullable :

int
number2 = number.Value + 2;

Concernant le boxing, il vous sera possible de boxer un type seulement si celui-ci est nullable. Nous pourrions donc avoir :

object
o = 33;
int? number = (int?)o;

Publicité
Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article