Introduction : Pourquoi les erreurs sont normales
Le parcours de chaque développeur commence par des erreurs. C# (.NET) est un langage puissant et fortement typé qui pardonne moins que les langages dynamiques, mais offre en retour fiabilité et performance. Dans cet article, nous allons décortiquer les 4 pièges les plus fréquents dans lesquels tombent les débutants, et montrer comment les éviter. Cet article sera utile aussi bien à ceux qui commencent tout juste à apprendre C# qu'à ceux qui souhaitent rafraîchir leurs connaissances.
1. Ignorer null et NullReferenceException
L'erreur la plus courante en C# est NullReferenceException. Elle se produit lorsque vous tentez d'accéder à un membre d'un objet qui est null.
Exemple du problème
string text = null;int length = text.Length; // Erreur ! NullReferenceExceptionLes débutants oublient souvent de vérifier les valeurs retournées par les méthodes, ou supposent que l'objet existe forcément.
Comment faire correctement
- Vérifiez toujours les objets pour
nullavant de les utiliser. - Utilisez les opérateurs
?.(null-conditional) et??(null-coalescing).
string text = GetText(); // peut retourner nullint? length = text?.Length; // si text == null, length sera nullint safeLength = text?.Length ?? 0; // si null, alors 0Console.WriteLine(safeLength);De plus, depuis C# 8.0+, il existe les nullable reference types, qui s'activent via #nullable enable. Ils vous obligent à indiquer explicitement si une variable peut être null, et vous avertissent des problèmes potentiels dès la compilation.
2. Mauvaise utilisation de var et perte de lisibilité
Le mot-clé var permet au compilateur de déterminer lui-même le type de la variable. C'est pratique, mais les débutants en abusent souvent, rendant le code illisible.
Exemple de mauvais code
var data = GetData();var result = Process(data);var output = Transform(result); // Quels sont les types ? Pas clair.Un mois plus tard, vous (ou votre collègue) ne pourrez pas comprendre rapidement quel est le type de data sans regarder la définition de la méthode.
Quand utiliser var
- Lorsque le type est évident d'après la partie droite (par exemple,
var list = new List<int>();) - Lorsqu'on travaille avec des types anonymes et des requêtes LINQ.
// Bien : le type est évidentvar numbers = new List<int> { 1, 2, 3 };
// Bien : type anonymevar person = new { Name = "John", Age = 30 };
// Mal : le type n'est pas clairvar config = LoadConfiguration(); // Mieux : Configuration config = LoadConfiguration();Règle d'or : n'utilisez var que lorsque cela améliore la lisibilité, et non lorsqu'elle la réduit.
3. Avaler les exceptions et les blocs catch vides
De nombreux débutants, confrontés aux exceptions, écrivent un catch vide ou se contentent d'afficher un message sans analyser l'erreur. Cela rend le programme instable et complique le débogage.
Exemple d'anti-patron
try{ int.Parse("pas un nombre");}catch (Exception){ // On ne fait rien — l'erreur est "avalée"}L'application continuera de fonctionner, mais dans un état incorrect. L'utilisateur ne sera pas informé du problème et les données pourraient être corrompues.
Comment gérer les exceptions correctement
- N'attrapez pas l'
Exceptiongénérale si vous ne prévoyez pas de traiter tous les types d'erreurs. - Attrapez uniquement les exceptions que vous pouvez gérer (par exemple,
FormatException,FileNotFoundException). - Utilisez
finallypour libérer les ressources (fichiers, connexions). - Consignez les erreurs dans les logs.
try{ int number = int.Parse(userInput);}catch (FormatException ex){ // On logge et on informe l'utilisateur // (suite du code non fournie dans l'original)}