Opérateur conditionnel de nullité
Accès sûr avec ?..
Opérateur conditionnel de nullité est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.
Le problème des chaînes d'accès avec des valeurs nulles
Accéder à un membre d'une référence null déclenche une NullReferenceException. C'est l'une des erreurs d'exécution les plus courantes en C#.
Lorsque vous enchaînez des appels comme user.Address.City, n'importe quel maillon de la chaîne peut être nul, et l'ancienne solution consistait en une cascade de vérifications avec if.
Découvrez ?.
L'opérateur conditionnel en cas de valeur nulle ?. interrompt l'évaluation de toute l'expression. Si le membre de gauche vaut null, le résultat est null au lieu de déclencher une exception.
On peut le comprendre ainsi : « accéder à ce membre, mais uniquement si l'objet n'est pas nul ».
string name = null;
int? length = name?.Length;
System.Console.WriteLine(length == null);Le résultat peut être nul
Comme ?. peut produire null, le type du résultat peut être nul. name?.Length est de type int?, et non de type int.
C'est pourquoi vous devez le stocker dans un int? plutôt que dans un int ordinaire.
string text = "hello";
int? len = text?.Length;
System.Console.WriteLine(len);Un exemple exécutable
Ce programme montre que ?. renvoie une valeur lorsque l'objet existe, et null lorsqu'il n'existe pas.
Exécutez-le et constatez qu'aucune exception n'est jamais déclenchée.
using System;
class Program
{
static void Main()
{
string a = "world";
string b = null;
Console.WriteLine(a?.ToUpper());
Console.WriteLine(b?.ToUpper() ?? "(null)");
}
}Enchaîner plusieurs opérateurs ?.
Vous pouvez enchaîner ?. sur plusieurs membres. Dès qu'une partie vaut null, toute la chaîne s'arrête et renvoie null.
Ainsi, customer?.Order?.Total est sûr même si customer ou Order est nul.
string s = null;
int? upperLen = s?.ToUpper()?.Length;
System.Console.WriteLine(upperLen == null);Indexeur conditionnel en cas de valeur nulle ?[]
Il existe une forme avec indexeur, ?[], pour les tableaux et les listes. Si la collection vaut null, l'accès à l'index renvoie null au lieu de provoquer un plantage.
Remarque : cet opérateur protège contre une collection nulle, mais pas contre un indice hors limites.
int[] data = null;
int? first = data?[0];
System.Console.WriteLine(first == null);Appeler des méthodes en toute sécurité
?. protège également les appels de méthodes. list?.Clear() appelle Clear uniquement si list n'est pas nul ; sinon, il ne fait rien.
Pour une méthode qui renvoie void, toute l'instruction devient simplement une opération vide lorsque la valeur est nulle.
System.Collections.Generic.List<int> list = null;
list?.Add(5);
System.Console.WriteLine("No crash");Déclenchement sécurisé des événements
Le déclenchement d'événements est un cas d'utilisation classique. SomeEvent?.Invoke(this, args) déclenche l'événement en toute sécurité uniquement lorsqu'au moins un gestionnaire y est abonné.
Cela a remplacé l'ancien modèle de vérification de nullité, qui pouvait provoquer une situation de concurrence entre la vérification et l'appel.
System.Action handler = null;
handler?.Invoke();
System.Console.WriteLine("Invoked safely");Combiner avec ??
?. s'associe naturellement à l'opérateur de coalescence des valeurs nulles ?? pour fournir une valeur de repli lorsque la chaîne produit une valeur nulle.
name?.Length ?? 0 renvoie la longueur, ou 0 si name est nul.
string name = null;
int length = name?.Length ?? 0;
System.Console.WriteLine(length);Un piège subtil
Même lorsque le type valeur final ne peut pas être nul, l'utilisation de ?. rend l'expression potentiellement nulle. list?.Count est de type int?, et non de type int.
Si vous avez besoin d'un int ordinaire, faites suivre l'expression de ?? 0 ou utilisez GetValueOrDefault().
var list = new System.Collections.Generic.List<int> { 1, 2 };
int count = list?.Count ?? 0;
System.Console.WriteLine(count);Comparaison complète
Ce programme compare l'approche détaillée avec if à la version concise utilisant ?.. Les deux évitent l'exception, mais ?. est bien plus clair.
using System;
class Program
{
static void Main()
{
string s = null;
int len = s != null ? s.Length : -1;
Console.WriteLine(len);
Console.WriteLine(s?.Length ?? -1);
}
}Vérification rapide
Vérifiez votre compréhension de l'opérateur conditionnel en cas de valeur nulle.
Récapitulatif
L'opérateur conditionnel en cas de valeur nulle ?. (et l'indexeur ?[]) interrompt l'accès à un membre lorsque l'objet vaut null, en renvoyant null au lieu de déclencher une exception.
Le résultat peut alors être nul ; combinez donc cet opérateur avec ?? pour fournir une valeur de repli.
Questions Fréquemment Posées
La leçon « Opérateur conditionnel de nullité » est-elle gratuite ?
Oui — le texte complet de « Opérateur conditionnel de nullité » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Opérateur conditionnel de nullité » ?
Accès sûr avec ?.. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C# Academy ?
Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Opérateur conditionnel de nullité » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?
Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Types de valeurs pouvant être nulles
- Opérateur conditionnel de nullité
- Opérateurs de coalescence de nullité
- Se prémunir contre les valeurs nulles