Maison >développement back-end >C++ >Comprendre et corriger la « référence d'objet non définie sur une instance d'un objet » en C#

Comprendre et corriger la « référence d'objet non définie sur une instance d'un objet » en C#

王林
王林original
2024-07-19 01:15:19788parcourir

Understanding and Fixing

Introduction

L'une des erreurs les plus courantes et les plus frustrantes rencontrées par les développeurs C# est la fameuse référence d'objet non définie sur une instance d'un objet. Ce message d'erreur peut prêter à confusion, en particulier pour ceux qui débutent en programmation. Dans cet article, nous démystifierons cette erreur, expliquerons ses causes, fournirons une analogie mémorable avec la vie réelle et proposerons des solutions pour la prévenir et la corriger.

Que signifie « Référence d'objet non définie sur une instance d'un objet » ?
En termes simples, cette erreur se produit lorsque vous essayez d'utiliser un objet qui n'a pas encore été créé. C'est comme essayer de conduire une voiture qui n'a pas été construite : vous ne pouvez pas utiliser quelque chose qui n'existe pas.

En termes techniques, cette erreur est une NullReferenceException. Cela se produit lorsque vous tentez d'accéder à un membre (méthode, propriété, champ) d'un objet nul. Un objet nul signifie que la référence de l'objet ne pointe vers rien ou qu'aucune instance de l'objet n'existe en mémoire.

Analogie réelle
Imaginez que vous êtes chez vous et que vous souhaitez passer un appel téléphonique. Vous prenez votre téléphone, mais il n’est pas là parce que vous n’en avez jamais acheté. Dans ce scénario :

  • Le téléphone est l'objet.

  • Atteindre le téléphone, c'est comme essayer d'accéder à un membre de l'objet.

  • Ne pas avoir le téléphone, c'est comme si la référence de l'objet était nulle.

Donc, lorsque vous essayez de passer un appel, vous ne pouvez pas, car le téléphone (objet) n'existe pas. De même, dans votre code, si vous essayez d'utiliser un objet qui n'a pas été instancié, la référence d'objet n'est pas définie sur une instance d'erreur d'objet.

Scénarios et correctifs courants :

- Objets non initialisés

class Person
{
    public string Name { get; set; }
}

Person person = null;
Console.WriteLine(person.Name); // Throws NullReferenceException

Correction : initialiser l'objet

Person person = new Person();
person.Name = "John";
Console.WriteLine(person.Name); // No error

- Membres non initialisés dans une classe

class Car
{
    public Engine Engine { get; set; }
}

class Engine
{
    public int Horsepower { get; set; }
}

Car car = new Car();
Console.WriteLine(car.Engine.Horsepower); // Throws NullReferenceException

Correction : initialiser le membre

Car car = new Car { Engine = new Engine() };
car.Engine.Horsepower = 150;
Console.WriteLine(car.Engine.Horsepower); // No error

- Retour nul des méthodes

class Repository
{
    public Person GetPersonById(int id)
    {
        // Returns null if person not found
        return null;
    }
}

Repository repo = new Repository();
Person person = repo.GetPersonById(1);
Console.WriteLine(person.Name); // Throws NullReferenceException

Correction : vérifier la valeur Null

Person person = repo.GetPersonById(1);
if (person != null)
{
    Console.WriteLine(person.Name); // No error if person is not null
}
else
{
    Console.WriteLine("Person not found");
}

- Hypothèses incorrectes sur les collections

List<Person> people = null;
Console.WriteLine(people.Count); // Throws NullReferenceException

Correction : initialiser les collections

List<Person> people = new List<Person>();
Console.WriteLine(people.Count); // No error

Meilleures pratiques pour éviter les exceptions NullReferenceExceptions

  1. Utiliser des opérateurs conditionnels nuls

L'opérateur conditionnel nul (?.) peut aider à accéder en toute sécurité aux membres d'un objet qui pourrait être nul.

Person person = null;
Console.WriteLine(person?.Name); // No error, outputs nothing

  1. Initialiser les variables et les membres

Initiez toujours vos variables et membres de classe pour éviter les références nulles.

class Car
{
    public Engine Engine { get; set; } = new Engine();
}

  1. Effectuer des vérifications nulles

Vérifiez toujours la valeur null avant d'accéder aux membres d'un objet.

if (person != null)
{
    Console.WriteLine(person.Name);
}

  1. Utilisez une navigation sécurisée avec LINQ

Lorsque vous utilisez LINQ, assurez-vous que les collections ne sont pas nulles avant d'effectuer des requêtes.

var names = people?.Select(p => p.Name).ToList();

Conclusion
La référence d'objet non définie sur une instance d'erreur d'objet est une pierre d'achoppement courante pour les développeurs C#, mais comprendre sa cause et savoir comment la prévenir et la corriger peut vous éviter bien des maux de tête. N'oubliez pas d'initialiser vos objets et d'effectuer des vérifications nulles si nécessaire. Avec ces bonnes pratiques à l'esprit, vous serez bien équipé pour gérer et éviter cette erreur dans vos futurs projets.

Compte LinkedIn : LinkedIn
Compte Twitter : Twitter
Crédit : Graphiques provenant de LoginRadius

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:C, Bibliothèques essentiellesArticle suivant:C, Bibliothèques essentielles