184 votes

Que signifie "Object reference not set to an instance of an object" ?

Je reçois cette erreur et je ne suis pas sûr de ce qu'elle signifie ?

La référence de l'objet ne correspond pas à une instance d'un objet.

160voto

Iain Points 2909

Les variables dans .NET sont soit des types de référence, soit des types de valeur. Les types de valeur sont des primitives telles que nombres entiers y booléens ou structures (et peuvent être identifiées car elles héritent de System.ValueType ). Les variables booléennes, lorsqu'elles sont déclarées, ont une valeur par défaut :

bool mybool;
//mybool == false

Les types de référence, lorsqu'ils sont déclarés, n'ont pas de valeur par défaut :

class ExampleClass
{
}

ExampleClass exampleClass; //== null

Si vous essayez d'accéder à un membre d'une instance de classe en utilisant une référence nulle, vous obtiendrez une System.NullReferenceException . Ce qui revient à dire que La référence à un objet n'est pas définie comme une instance d'un objet. .

Le code suivant est un moyen simple de reproduire ce phénomène :

static void Main(string[] args)
{
    var exampleClass = new ExampleClass();
    var returnedClass = exampleClass.ExampleMethod();
    returnedClass.AnotherExampleMethod(); //NullReferenceException here.
}

class ExampleClass
{
    public ReturnedClass ExampleMethod()
    {
        return null;
    }
}

class ReturnedClass
{
    public void AnotherExampleMethod()
    {
    }
}

Il s'agit d'une erreur très courante qui peut se produire pour toutes sortes de raisons. La cause première dépend vraiment du scénario spécifique que vous avez rencontré.

Si vous utilisez une API ou si vous invoquez des méthodes qui peuvent renvoyer un résultat nul, il est important de gérer ce problème. avec élégance . La méthode principale ci-dessus peut être modifiée de manière à ce que l'exception NullReferenceException ne soit jamais vue par un utilisateur :

static void Main(string[] args)
{
    var exampleClass = new ExampleClass();
    var returnedClass = exampleClass.ExampleMethod();

    if (returnedClass == null)
    {
        //throw a meaningful exception or give some useful feedback to the user!
        return;
    }

    returnedClass.AnotherExampleMethod();
}

Tout ce qui précède n'est qu'un aperçu des principes de base de .NET Type. Pour plus d'informations, je vous recommande de vous procurer le document suivant CLR via C# ou en lisant ceci Article de MSDN par le même auteur - Jeffrey Richter. Regardez aussi, beaucoup plus complexe, exemple de quand vous pouvez rencontrer une NullReferenceException.

Certaines équipes utilisant Resharper font appel à Attributs de JetBrains pour annoter le code afin de mettre en évidence les endroits où l'on s'attend (ou non) à trouver des valeurs nulles.

20voto

Jay Points 6999

Un autre moyen facile de l'obtenir :

 Person myPet = GetPersonFromDatabase();
 // check for myPet == null... AND for myPet.PetType == null
 if ( myPet.PetType == "cat" ) <--- fall down go boom!

10voto

dkpatt Points 317

Je ne veux pas être brutal, mais ça veut dire exactement ce que ça veut dire. Une de vos références d'objet est NULL. Vous verrez cela lorsque vous essayerez d'accéder à la propriété ou à la méthode d'un objet NULL.

5voto

Darren Kopp Points 27704

Dkpatt a raison, mais aussi, c'est le message associé à une NullReferenceException

pour une explication plus détaillée, voir Réponse de @Iain quant aux sources communes de l'exception NullReferenceException

1voto

TStamper Points 17163

Que signifie cette erreur ? La référence à un objet n'est pas définie comme une instance d'un objet.

exactement ce qu'il dit, vous essayez d'utiliser un objet nul comme si c'était un objet correctement correctement référencé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X