Comment fonctionnent les types de référence Nullable de C #?
L'une des principales fonctionnalités de C # 8.0 est le concept de types de référence Nullable, qui représentent un changement majeur dans la façon dont les programmeurs peuvent gérer les données Null. Nous allons discuter de leur fonctionnement et de leur utilisation.
Quels sont les types de référence Nullable?
Il existe deux principaux types de variables en C #. Les types de valeur ont des tailles fixes, comme int
, float
, et bool
. Ils sont transmis entre les fonctions par valeur et généralement stockés sur la pile – une mémoire très rapide qui est nettoyée en cas de dépassement de la portée. Ils ne peuvent jamais être nuls, mais en utilisant le Nullable
struct, les types valeur peuvent être conçus pour prendre en charge les données nulles si vous souhaitez ce comportement.
L'autre type de type est celui des types de référence, qui sont des objets plus volumineux sans taille fixe, comme des chaînes et des listes. Ils sont presque toujours stockés sur le tas, la variable sur la pile étant une référence à l'emplacement mémoire.
Le problème est que les types de référence peuvent devenir nuls. La variable qui stocke l'emplacement peut être définie sur une valeur nulle, ce qui est assez courant, en particulier lorsqu'il s'agit de données dont la présence n'est pas garantie, comme les questions facultatives dans un formulaire Web. C'est pourquoi .NET a besoin d'un garbage collector, pour nettoyer les objets qui n'ont plus de références actives.
Si vous êtes un programmeur .NET, vous êtes définitivement habitué à vérification nulle, dans lequel vous vérifiez manuellement si quelque chose est devenu nul avant de l'utiliser. Cela fonctionne bien, et c’est une opération très bon marché, mais dans de nombreux cas, ce n’est pas nécessaire. Pour qu'un type de référence soit nul, il doit soit ne pas avoir été initialisé avec une valeur appropriée, soit avoir été affecté manuellement à la valeur de null
, par exemple.,
variable = null;
Les types de référence Nullable sont un nouvel ajout qui applique essentiellement une différence entre les variables de référence qui peuvent devenir nulles et les variables de référence qui ne le peuvent pas. Il s'agit d'une fonctionnalité révolutionnaire qui laissera probablement votre base de code avec de nombreux avertissements, c'est donc quelque chose que vous devez activer manuellement. Une fois qu'il est activé, le compilateur commence à faire la différence entre:
string?
, qui peut être null et conserve le comportement «par défaut» des versions antérieures, etstring
, lequel ne peux pas être nul. Il ne peut jamais être nul, car il doit recevoir une valeur par défaut et ne peut jamais être défini sur null.
Avec la fonctionnalité activée, les types de référence fonctionneront en grande partie de la même manière que les types de valeur – ne devenant jamais null à moins que vous disiez au compilateur qu'il peut avec le Type?
syntaxe. Techniquement, les «types de référence Nullable» sont ce que C # a eu pour toujours, et la nouvelle fonctionnalité est les types de référence non Nullable qui remplacent les anciens.
Cette fonctionnalité simple vous permet d'informer le compilateur de vos intentions pour la variable. Si vous essayez d'attribuer un nullable string?
valeur à un non-nullable string
variable, vous recevrez un avertissement indiquant que vous ne gérez pas correctement null.
Pour corriger cet avertissement, vous devez définir la valeur non nullable seulement après avoir vérifié s'il n'est pas nul. Le compilateur est intelligent et sait quand et où la valeur peut être nulle. Si vous l'enveloppez dans un if (value != null)
bloqué, il ne vous donnera pas d'avertissement et vous rappellera qu'il n'est pas nul lors de son utilisation.
Contrairement aux types valeur Nullable, les types référence Nullable sont implicitement convertis en leurs équivalents non Nullable, mais avec un avertissement.
Vous pouvez utiliser des types de référence Nullable partout où vous pouvez utiliser des types réguliers, que ce soit en tant que variable locale, des champs ou des propriétés pour les classes et les structures, et des paramètres d'entrée pour les fonctions. Si vous essayez de les convertir en non-null sans vérifier, vous obtiendrez une erreur.
Comment activer le contexte nul
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur votre projet et sélectionnez "Modifier le fichier de projet". Vous devrez peut-être d'abord le décharger pour voir cette option.
enable
Si vous utilisez le format de projet hérité, vous devrez peut-être le remplacer manuellement par une directive en haut de chaque fichier:
#nullable enable
Si vous ne souhaitez pas activer les avertissements, vous pouvez utiliser le contexte "Annotation", qui n'affichera les annotations que lorsque vous les survolerez.