CodeGym /Cours /C# SELF /Activation et configuration des Nullable Reference Types ...

Activation et configuration des Nullable Reference Types (NRT) dans un projet

C# SELF
Niveau 14, Leçon 2
Disponible

1. Intro

Pourquoi faut activer NRT à la main ?

Nullable Reference Types (NRT), c’est pas juste du sucre syntaxique, c’est un vrai pote du compilateur pour t’aider à éviter les bugs liés à null. Mais pour des raisons historiques, ce mode n’est pas activé par défaut dans les vieux projets — histoire de pas tout casser niveau compatibilité. Si tu crées un nouveau projet avec les dernières versions de .NET (genre .NET 7, 8 ou 9), NRT est sûrement déjà activé. Mais si ton projet date un peu ou si tu veux gérer ce mode à la main, faut le faire explicitement.

À quoi sert le mode Nullable Reference Types ?

Quand ce mode est actif, le compilateur analyse quelles variables de référence peuvent être null et lesquelles ne le peuvent pas. Il n’intervient pas dans l’exécution du programme, mais il balance plein d’avertissements s’il voit un truc louche. C’est top pour écrire du code fiable, clair et solide.

Comment savoir si le mode NRT est activé ?

Si t’as un projet récent .NET 6 ou plus, NRT est sûrement déjà là. Mais on sait jamais. On va vérifier !

  • Ouvre le fichier projet. En général, c’est un fichier avec l’extension .csproj.
  • Repère ou ajoute le réglage <Nullable> dans le premier tag <PropertyGroup>.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>
Exemple de fichier .csproj avec NRT activé

Si tu vois <Nullable>disable</Nullable>, ça veut dire que le contrôle NRT est désactivé.

2. Comment activer le mode NRT

Via .csproj — pour tout le projet

  1. Ouvre (ou crée) le fichier .csproj.
  2. Dans le bloc <PropertyGroup>, ajoute ou modifie la ligne :

<Nullable>enable</Nullable>

Maintenant le compilateur va checker tous les fichiers .cs du projet et râler sur les accès potentiellement dangereux à null.

Pourquoi faire ça ?
Parce que c’est un réglage global. À partir de là, tout le projet suit les nouvelles règles : null est suspect, et la négligence ne passera plus !

Juste pour certains fichiers ou bouts de code

Si t’es pas prêt à activer le mode strict partout, tu peux t’entraîner sur des fichiers séparés. Pour ça, on utilise les directives préprocesseur :


#nullable enable
string? value = null; // Ici l’analyse est activée

#nullable disable
string legacyValue = null; // Et là — plus d’analyse

#nullable restore
  • #nullable enable — active le check jusqu’à la fin du fichier.
  • #nullable disable — le désactive.
  • #nullable restore — remet les réglages du .csproj ou d’un fichier externe.

C’est pratique : tu peux activer le contrôle strict dans les nouveaux modules sans toucher au vieux code pas très stable.

Quoi d’autre dans <Nullable> ?

Valeur Comportement
enable
Active tout : annotations et warnings
disable
Désactive complètement l’analyse des références null
warnings
Juste les warnings, sans forcer les annotations
annotations
Faut mettre les annotations, mais le compilateur ne râle pas
restore
Remet le comportement d’origine (genre depuis le réglage global)

En général, on utilise enable ou disable.

3. Démo avec un exemple

Avant d’activer NRT

// Mode ancien, NRT désactivé
string s = null; // Aucun souci

Console.WriteLine(s.Length); // Dangereux ! Possible NullReferenceException

Après activation de NRT

// Nouveau mode, NRT activé
string s = null; // Warning : assignation possible de null
Console.WriteLine(s.Length); // Warning : accès possible à null

Maintenant ton IDE va souligner les soucis potentiels et le compilateur va prévenir : Dereference of a possibly null reference. (CS8602)

Comment corriger ça ?

string? s = null;

if (s != null)
{
    Console.WriteLine(s.Length);
}

Là tu dis clairement : cette variable peut être null, et le compilateur est content.

4. Que faire si le projet est "à l’ancienne" ?

Beaucoup de projets ont été codés à l’époque où null était partout dans les variables de référence. En activant NRT, c’est comme si tu embauchais un contrôleur strict qui va te signaler chaque souci potentiel.

Et si y’a trop de warnings ?

Panique pas — ce sont pas des erreurs, juste des conseils. Le programme compile quand même.

  • Tu peux activer NRT que dans les nouveaux fichiers.
  • Petit à petit, tu ranges le code : tu ajoutes ?, tu fais des checks sur null, tu utilises ! (on verra ça plus tard).
  • Retiens : plus tu fais gaffe avec null, moins t’auras de galères après.

Compatibilité et libs externes

  • Activer NRT ne change rien à l’exécution, ça ajoute juste de l’analyse à la compilation.
  • Le vieux code peut sortir plein de warnings d’un coup.
  • Si tu utilises des libs sans annotations NRT, le compilateur va rester prudent et supposer que tout peut être null.
2
Mission
C# SELF, niveau 14, leçon 2
Bloqué
Vérification du fonctionnement des Nullable Reference Types pour les méthodes
Vérification du fonctionnement des Nullable Reference Types pour les méthodes
2
Mission
C# SELF, niveau 14, leçon 2
Bloqué
Activation partielle des Nullable Reference Types
Activation partielle des Nullable Reference Types
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION