Partager via


Dépannage des exceptions : System.NullReferenceException

Une exception NullReferenceException se produit quand vous essayez d'utiliser une méthode ou propriété d'un type de référence (C#, Visual Basic) dont la valeur est null. Par exemple, vous avez peut-être essayé d'utiliser un objet sans utiliser d'abord le mot clé new (New en Visual Basic) ou un objet dont la valeur était null (Nothing en Visual Basic).

Sections de cet article

Classes utilisées dans cet article

Causes courantes de NullReferenceExceptions

Recherche de la source de NullReferenceExceptions durant le développement

Éviter les exceptions NullReferenceException

Gestion des exceptions NullReferenceException dans le code de publication

Classes utilisées dans cet article

La plupart des exemples de cet article utilisent l'une ou l'autre des classes suivantes, ou les deux :

public class Automobile
{
    public EngineInfo Engine {get; set;}
}

public class EngineInfo
{
    public EngineInfo() { }

    public EngineInfo(string powerSrc, double engineSize)
    {
        Power = powerSrc;
        Size = engineSize;
    }

    public double Size { get; set; }
    public string Power = null;
}
   
Public Class Automobile
    Public Property Engine As EngineInfo
End Class

Public Class EngineInfo
    Public Sub New()
    End Sub

    Public Sub New(powerSrc As String, engineSize As Double)
        Power = powerSrc
        Size = engineSize
    End Sub

    Public Property Size() As Double
    Public Power As String = Nothing
End Class

Retour au débutAutres sections de cet article

Causes courantes de NullReferenceExceptions

Toute variable de type de référence peut avoir la valeur null. Les variables locales, les propriétés d'une classe, les paramètres de méthode et les valeurs de retour de méthode peuvent tous contenir une référence null. L'appel des méthodes ou des propriétés de ces variables quand elles ont une valeur null engendre une exception NullReferenceException. Cas spécifiques :

Un champ de variable ou membre local est déclaré mais non initialisé

Une propriété ou un champ a la valeur null

Un paramètre de méthode a la valeur null

La valeur de retour d'une méthode est null

Un objet dans une collection ou un tableau a la valeur null

Un objet n'est pas créé en raison d'une condition

Un objet passé par référence à une méthode est défini sur null

Un champ de variable ou membre local est déclaré mais non initialisé

Cette erreur simple se produit plus fréquemment dans le code Visual Basic. À part certaines situations comme la déclaration d'une variable devant être passée comme paramètre de sortie, le compilateur C# ne permet pas l'utilisation d'une variable de référence locale tant qu'elle n'est pas initialisée. Le compilateur Visual Basic génère un avertissement.

  • Dans le code C# suivant, la ligne en surbrillance génère cette erreur de compilation :

Utilisation d'une variable locale non assignée 'engine'

  • Dans du code Visual Basic, la ligne surlignée génère l'avertissement de compilation BC42104 :

La variable 'engine' est utilisée avant qu'une valeur ne lui ait été assignée.  Une exception de référence null peut se produire au moment de l'exécution

La ligne lève une exception NullReferenceException quand elle est exécutée.
public void NullReferencFromUninitializedLocalVariable()
{
    EngineInfo engine;
    Console.WriteLine(engine.ToString());
}
Public Sub NullReferencFromUninitializedLocalVariable()
    Dim engine As EngineInfo
    Console.WriteLine(engine.ToString())
End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Une propriété ou un champ a la valeur null

Les champs et les propriétés d'une classe sont automatiquement initialisés sur leur valeur par défaut quand la classe est créée. La valeur par défaut d'un type de référence est null (Nothing en Visual Basic). L'appel des méthodes membres sur un champ ou une propriété d'une classe parente quand la valeur du champ ou de la propriété est null engendre une exception NullReferenceException.

Dans cet exemple, la ligne surlignée lève une exception NullReferenceException, car la propriété Engine de car est automatiquement initialisée sur la valeur null.

public void NullReferenceFromProperty()
{
    var car = new Automobile();

    Console.WriteLine(car.Engine.ToString());
}
Public Sub NullReferenceFromProperty()
    Dim car = New Automobile()
    Console.WriteLine(car.Engine.ToString())
End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Un paramètre de méthode a la valeur null

Un paramètre de méthode qui est un type de référence peut avoir la valeur null (Nothing en Visual Basic). L'appel des méthodes ou propriétés membres sur une valeur de paramètre null engendre une exception NullReferenceException.

Dans cet exemple, la ligne surlignée lève une exception NullReferenceException, car BadEngineInfoPassedToMethod appelle NullReferenceFromMethodParameter avec un paramètre dont la valeur est null.

public void BadEngineInfoPassedToMethod()
{
    EngineInfo eng = null;
    NullReferenceFromMethodParameter(eng);
}

public void NullReferenceFromMethodParameter(EngineInfo engine)
{
    Console.WriteLine(engine.ToString());
}
Public Sub BadParameterPassedToMethod() As EngineInfo
    Dim eng As EngineInfo = Nothing
    NullReferenceFromMethodParameter(eng)
End Sub

Public Sub NullReferenceFromMethodParameter(engine As EngineInfo)
    Console.WriteLine(engine.ToString())
End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

La valeur de retour d'une méthode est null

Une méthode qui retourne un type de référence peut retourner la valeur null (Nothing en Visual Basic). L'appel des méthodes ou propriétés du type de référence retourné engendre une exception NullReferenceException quand la référence a la valeur null.

Dans cet exemple, la ligne surlignée lève une exception NullReferenceException, car l'appel de BadGetEngineInfo retourne une référence null dans la méthode NullReferenceFromMethodParameter.

public EngineInfo BadGetEngineInfo()
{
    EngineInfo engine = null;
    return engine;
}

public void NullReferenceFromMethodReturnValue()
{
    var engine = BadGetEngineInfo();
    Console.WriteLine(engine.ToString());
}
Public Function BadGetEngineInfo() As EngineInfo
    Dim engine As EngineInfo = Nothing
    Return engine
End Function

Public Sub NullReferenceFromMethodReturnValue()
    Dim engine = BadGetEngineInfo()
    Console.WriteLine(engine.ToString())
End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Un objet dans une collection ou un tableau a la valeur null

Une liste ou un tableau de types de référence peut contenir un élément dont la valeur est null. L'appel des méthodes ou propriétés d'un élément d'une liste dont la valeur est null engendre une exception NullReferenceException.

Dans cet exemple, la ligne surlignée dans NullReferenceFromListItem() lève une exception NullReferenceException, car l'appel de BadGetCarList retourne un élément avec la valeur null.

public Automobile[] BadGetCarList()
{
    var autos = new Automobile[10];
    for (int i = 0; i autos.Length; i++)
    {
        if (i != 6)
        {
            autos[i] = new Automobile();
        }
    }
    return autos;
}

public void NullReferenceFromListItem()
{
    var cars = BadGetCarList();
    foreach (Automobile car in cars)
    {
        Console.WriteLine(car.ToString());
    }
}
Public Function BadGetCarList() As Automobile()
    Dim autos = New Automobile(10) {}
    For i As Integer = 0 To 9
        If i <> 6 Then
            autos(i) = New Automobile()
        End If
    Next
    Return autos
End Function

Public Sub NullReferenceFromListItem()
    Dim cars = BadGetCarList()
    For Each car As Automobile In cars
        Console.WriteLine(car.ToString())
    Next
End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Un objet n'est pas créé en raison d'une condition

Si un type de référence est initialisé dans un bloc conditionnel, l'objet n'est pas créé quand la condition est false.

Dans cet exemple, la ligne surlignée dans NullReferenceFromConditionalCreation lève une exception NullReferenceException, car elle initialise la variable engine uniquement si la méthode DetermineTheCondition() retourne true.

 public bool DetermineTheCondition()
{
    return false;
}

public void NullReferenceFromConditionalCreation()
{
    EngineInfo engine = null;
    var condition = DetermineTheCondition();
    if (condition)
    {
        engine = new EngineInfo();
        engine.Power = "Diesel";
        engine.Size = 2.4;
    }
    Console.WriteLine(engine.Size);
}
Public Function DetermineTheCondition() As Boolean
    Return False
End Function

Public Sub NullReferenceFromConditionalCreation()
    Dim engine As EngineInfo = Nothing
    Dim condition = DetermineTheCondition()
    If condition Then
        engine = New EngineInfo()
        engine.Power = "Diesel"
        engine.Size = 2.4
    End If
    Console.WriteLine(engine.Size)
End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

La propriété d'un objet passé à une méthode est définie sur la valeur null

Quand vous passez un objet en tant que paramètre à une méthode par valeur (sans utiliser le mot clé ref ou out en C#, ou le mot clé ByRef en Visual Basic), la méthode ne peut pas changer l'emplacement de la mémoire du paramètre (vers lequel pointe le paramètre), mais elle peut modifier les propriétés de l'objet.

Dans cet exemple, la méthode NullPropertyReferenceFromPassToMethod crée un objet Automobile et initialise la propriété Engine. Ensuite, elle appelle BadSwapCarEngine, en passant le nouvel objet en tant que paramètre. BadSwapCarEngine définit la propriété Engine sur null, ce qui pousse la ligne surlignée dans NullPropertyReferenceFromPassToMethod à lever une exception NullReferenceException.

public void BadSwapCarEngine(Automobile car)
{
    car.Engine = null;
}

public void (Automobile car)
{
    car.Engine = new EngineInfo("GAS", 1.5);
    BadSwapCarEngine(car);
    Console.WriteLine(car.Engine.ToString());
}
Public Sub BadSwapCarEngine(car As Automobile)
    car.Engine = Nothing
End Sub

Public Sub NullPropertyReferenceFromPassToMethod()
    Dim car As New Automobile()
    car.Engine = New EngineInfo("GAS", 1.5)
    BadSwapCarEngine(car)
    Console.WriteLine(car.Engine.ToString())
End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Un objet passé par référence à une méthode est défini sur null

Quand vous passez un type de référence en tant que paramètre à une méthode par référence (à l'aide du mot clé ref ou out en C#, ou du mot clé ByRef en Visual Basic), vous pouvez modifier l'emplacement de la mémoire vers lequel pointe le paramètre.

Si vous passez un type de référence par référence à une méthode, la méthode peut définir le type référencé sur null (Nothing en Visual Basic).

Dans cet exemple, la ligne surlignée dans NullReferenceFromPassToMethodByRef lève une exception NullReferenceException, car l'appel de la méthode BadEngineSwapByRef définit la variable stockEngine sur la valeur null.

public void BadEngineSwapByRef(ref EngineInfo engine)
{
    engine = null;
}

public void NullReferenceFromPassToMethodByRef()
{
    var stockEngine = new EngineInfo();
    stockEngine.Power = "Gas";
    stockEngine.Size = 7.0;
    BadSwapEngineByRef(ref stockEngine);
    Console.WriteLine(stockEngine.ToString());
}
Public Sub BadSwapEngineByRef(ByRef engine As EngineInfo)
    engine = Nothing
End Sub

Public Sub NullReferenceFromPassToMethodByRef()
    Dim formatStr = "The stock engine has been replaced by a {0} liter {} engine"
    Dim stockEngine = New EngineInfo()
    stockEngine.Power = "Gas"
    stockEngine.Size = 7.0
    BadSwapEngineByRef(stockEngine)
    Console.WriteLine(stockEngine.ToString())
End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Recherche de la source d'une exception NullReferenceException pendant le développement

Utilisez les info-bulles, la fenêtre Variables locales et les fenêtres Espions pour afficher les valeurs des variables

Parcourez la pile des appels pour rechercher l'endroit où une variable de référence n'est pas initialisée ou est définie sur null

Définir des points d'arrêt conditionnels pour arrêter le débogage quand un objet est null (Nothing en Visual Basic)

Utilisez les info-bulles, la fenêtre Variables locales et les fenêtres Espions pour afficher les valeurs des variables

  • Pointez sur le nom de la variable pour afficher sa valeur dans une info-bulle. Si la variable fait référence à un objet ou une collection, vous pouvez développer le type de données pour examiner ses propriétés ou éléments.

  • Ouvrez la fenêtre Variables locales pour examiner toutes les variables actives dans le contexte actuel.

  • Utilisez une fenêtre Espion pour vous concentrer sur les modifications d'une variable quand vous examinez le code.

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Parcourez la pile des appels pour rechercher l'endroit où une variable de référence n'est pas initialisée ou est définie sur null

La fenêtre Pile des appels de Visual Studio affiche une liste des noms des méthodes non terminées à l'arrêt du débogueur sur une exception ou un point d'arrêt. Vous pouvez sélectionner un nom dans la fenêtre Pile des appels et choisir Basculer vers le frame pour changer le contexte d'exécution de la méthode et examiner ses variables.

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Définir des points d'arrêt conditionnels pour arrêter le débogage quand un objet est null (Nothing en Visual Basic)

Vous pouvez définir un point d'arrêt conditionnel pour arrêter le débogage quand une variable a la valeur null. Les points d'arrêt conditionnels peuvent être utiles quand la référence null ne se produit pas souvent, par exemple quand un élément d'une collection est null seulement par intermittence. Les points d'arrêt conditionnels présentent un autre avantage : ils vous permettent de déboguer une erreur avant de valider une routine de gestion spécifique.

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Éviter les exceptions NullReferenceException

Utiliser Debug.Assert pour confirmer une indifférente

Initialiser complètement les types de référence

Utiliser Debug.Assert pour confirmer une indifférente

Une indifférente est une condition pour laquelle vous êtes sûr qu'elle est vraie. Une instruction Debug.Assert (System.Diagnostics) n'est appelée que dans les versions debug de vos applications et n'est pas appelée dans le code de publication. Si la condition indifférente n'est pas vraie, le débogueur s'arrête à l'instruction Assert et affiche une boîte de dialogue. Debug.Assert vérifie que la condition n'a pas changé pendant le développement de l'application. Une assertion indique également aux autres personnes qui lisent votre code que la condition doit toujours être vraie.

Par exemple, la méthode MakeEngineFaster suppose que son paramètre engine ne sera jamais null, car sa seule méthode appelante (TheOnlyCallerOfMakeEngineFaster) est connue pour initialiser complètement EngineInfo. L'assertion dans MakeEngineFaster documente la supposition et vérifie qu'elle est vraie.

Si une personne ajoute une nouvelle méthode appelante (BadNewCallerOfMakeEngineFaster) qui n'initialise pas le paramètre, l'assertion est déclenchée.

private void TheOnlyCallerOfMakeEngineFaster()
{
    var engine = new EngineInfo();
    engine.Power = "GAS";
    engine.Size = 1.5;
    MakeEngineFaster(engine);
}

private void MakeEngineFaster(EngineInfo engine)
{
    System.Diagnostics.Debug.Assert(engine != null, "Assert: engine != null");
    engine.Size *= 2;
    Console.WriteLine("The engine is twice as fast");
}

private void BadNewCallerOfMakeEngineFaster()
{
    EngineInfo engine = null;
    MakeEngineFaster(engine);
}
Public Sub TheOnlyCallerOfMakeEngineFaster()
    Dim engine As New EngineInfo
    engine.Power = "GAS"
    engine.Size = 1.5
    MakeEngineFaster(engine)
End Sub

Private Sub MakeEngineFaster(engine As EngineInfo)
    System.Diagnostics.Debug.Assert(engine IsNot Nothing, "Assert: engine IsNot Nothing")
    engine.Size = engine.Size * 2
    Console.WriteLine("The engine is twice as fast")
End Sub

Public Sub BadNewCallerOfMakeEngineFaster()
    Dim engine As EngineInfo = Nothing
    MakeEngineFaster(engine)
End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Initialiser complètement les types de référence

Pour éviter de nombreuses exceptions NullReferenceException, initialisez complètement les types de référence aussi près que possible de leur création.

Ajouter une initialisation complète à vos propres classes

Si vous contrôlez la classe qui lève une exception NullReferenceException, initialisez complètement l'objet dans le constructeur du type. Par exemple, voici une version révisée des exemples de classes qui garantit une initialisation complète :

public class Automobile
{
    public EngineInfo Engine { get; set; }

    public Automobile() 
    { 
        this.Engine = new EngineInfo(); 
    }

    public Automobile(string powerSrc, double engineSize)
    {
        this.Engine = new EngineInfo(powerSrc, engineSize);
    }
}


public class EngineInfo
{
    public double Size {get; set;}
    public string Power {get; set;}

    public EngineInfo() 
    { 
        // the base engine 
        this.Power = "GAS"; 
        this.Size = 1.5; 
    }

    public EngineInfo(string powerSrc, double engineSize)
    {
        this.Power = powerSrc;
        this.Size = engineSize;
    }
}
Public Class Automobile
    Public Property Engine As EngineInfo

    Public Sub New() 
        Me.Engine = New EngineInfo() 
    End Sub 

    Public Sub New(powerSrc As String, engineSize As Double) 
        Me.Engine = New EngineInfo(powerSrc, engineSize) 
    End Sub

End Class

Public Class BaseEngineInfo
    Public Sub New() 
        ' the base engine 
        Me.Power = "GAS" 
        Me.Size = 1.5 
    End Sub

    Public Sub New(powerSrc As String, engineSize As Double)
        Power = powerSrc
        Size = engineSize
    End Sub

    Public Property Size() As Double
    Public Power As String = String.Empty
End Class

Notes

Utiliser une initialisation tardive pour les propriétés de grande dimension ou rarement utilisées

Pour réduire l'encombrement mémoire de votre classe et augmenter ses performances, utilisez l'initialisation tardive des propriétés de type de référence.Consultez Initialisation tardive.

Gestion des exceptions NullReferenceException dans le code de publication

Rechercher la valeur null (Nothing en Visual Basic) avant d'utiliser un type de référence

Utiliser try – catch – finally (Try – Catch – Finally en Visual Basic) pour gérer l'exception

Il est préférable d'éviter une exception NullReferenceException plutôt que de la gérer une fois qu'elle s'est produite. La gestion d'une exception peut compliquer la tenue à jour et la compréhension de votre code. En outre, cela peut parfois introduire d'autres bogues. Une exception NullReferenceException est souvent une erreur non récupérable. Dans ce cas, la meilleure alternative peut consister à laisser l'exception arrêter l'application.

Toutefois, il existe de nombreuses situations où la gestion de l'erreur peut être utile.

  • Votre application peut ignorer des objets dont la valeur est null. Par exemple, si votre application récupère et traite des enregistrements dans une base de données, vous pouvez ignorer un certain nombre d'enregistrements incorrects qui engendrent des objets null. L'enregistrement de données incorrectes dans un fichier journal ou dans l'interface utilisateur de l'application peut être la solution.

  • Vous pouvez vous remettre d'une exception. Par exemple, un appel d'un service web retournant un type de référence peut retourner la valeur null si la connexion est perdue ou expire. Vous pouvez tenter de rétablir la connexion et réessayer l'appel.

  • Vous pouvez restaurer l'état valide de votre application. Par exemple, vous pouvez effectuer une tâche en plusieurs étapes nécessitant l'enregistrement d'informations dans une banque de données avant d'appeler une méthode qui lève une exception NullReferenceException. Si l'objet non initialisé risque d'endommager l'enregistrement des données, supprimez les données précédentes avant de fermer l'application.

  • Vous voulez signaler l'exception. Par exemple, si l'erreur a été provoquée par une erreur de l'utilisateur de votre application, vous pouvez générer un message pour l'aider à fournir les informations correctes. Vous pouvez également enregistrer des informations sur l'erreur pour vous aider à corriger le problème. Certaines infrastructures, comme ASP.NET, disposent d'un gestionnaire d'exceptions de haut niveau qui capture toutes les erreurs pour éviter tout blocage de l'application. Dans ce cas, la journalisation de l'exception peut représenter pour vous la seule façon de savoir que cela se produit.

Voici deux façons de gérer l'exception NullReferenceException dans le code de version.

Rechercher la valeur null (Nothing en Visual Basic) avant d'utiliser un type référence

L'utilisation d'un test explicite pour rechercher la valeur null avant d'utiliser un objet évite de pénaliser les performances des constructions try-catch-finally. Toutefois, vous devez encore déterminer et implémenter ce qu'il faut faire pour répondre à l'objet non initialisé.

Dans cet exemple, CheckForNullReferenceFromMethodReturnValue teste la valeur de retour de la méthode BadGetEngineInfo. Si l'objet n'est pas null, il est utilisé. Sinon, la méthode signale l'erreur.

public EngineInfo BadGetEngineInfo()
{
    EngineInfo engine = null;
    return engine;
}

public void CheckForNullReferenceFromMethodReturnValue()
{
    var engine = BadGetEngineInfo();
    if(engine != null)
    {
        // modify the info
        engine.Power = "DIESEL";
        engine.Size = 2.4;
    }
    else
    {
        // report the error
        Console.WriteLine("BadGetEngine returned null")
    }
}
public EngineInfo BadGetEngineInfo()
{
    EngineInfo engine = null;
    return engine;
}
Public Sub CheckForNullReferenceFromMethodReturnValue()
    Dim engine = BadGetEngineInfo()
    If (engine IsNot Nothing) Then
        ' modify the info
        engine.Power = "DIESEL"
        engine.Size = 2.4
    Else
        ' report the error
        Console.WriteLine("BadGetEngineInfo returned Nothing")
    End If

End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Utiliser try-catch-finally (Try-Catch-Finally en Visual Basic) pour gérer l'exception

L'utilisation des constructions de gestion des exceptions intégrées (try, catch, finally en C#, Try, Catch, Finally en Visual Basic) offre davantage d'options pour gérer les exceptions NullReferenceException que de vérifier si un objet n'est pas null.

Dans cet exemple, CatchNullReferenceFromMethodCall utilise deux actifs pour confirmer la supposition selon laquelle son paramètre contient une automobile complète, y compris un moteur. Dans le bloc try, la ligne surlignée lève une exception NullReferenceException, car l'appel de RarelyBadEngineSwap peut détruire la propriété Engine de la voiture. Le bloc catch capture l'exception, écrit les informations de l'exception dans un fichier et signale l'erreur à l'utilisateur. Dans le bloc finally, la méthode assure que l'état de la voiture n'est pas pire qu'au début de la méthode.

public void RarelyBadSwapCarEngine(Automobile car)
{
    if ((new Random()).Next() == 42)
    {
        car.Engine = null;
    }
    else
    {
        car.Engine = new EngineInfo("DIESEL", 2.4);
    }
}

public void CatchNullReferenceFromMethodCall(Automobile car)
{
    System.Diagnostics.Debug.Assert(car != null, "Assert: car != null");
    System.Diagnostics.Debug.Assert(car.Engine != null, "Assert: car.Engine != null");

    // save current engine properties in case they're needed
    var enginePowerBefore = car.Engine.Power;
    var engineSizeBefore = car.Engine.Size;

    try
    {
        RarelyBadSwapCarEngine(car);
        var msg = "Swap succeeded. New engine power source: {0} size {1}";
        Console.WriteLine(msg, car.Engine.Power, car.Engine.Size);
    }
    catch(NullReferenceException nullRefEx)
    {
        // write exception info to log file
        LogException(nullRefEx);
        // notify the user
        Console.WriteLine("Engine swap failed. Please call your customer rep.");
    }
    finally
    {
        if(car.Engine == null)
        {
            car.Engine = new EngineInfo(enginePowerBefore, engineSizeBefore);
        }
    }
}
Public Sub RarelyBadSwapCarEngine(car As Automobile)
    If (New Random()).Next = 42 Then
        car.Engine = Nothing
    Else
        car.Engine = New EngineInfo("DIESEL", 2.4)
    End If
End Sub

Public Sub CatchNullReferenceFromMethodCall(car As Automobile)
    System.Diagnostics.Debug.Assert(car IsNot Nothing)
    System.Diagnostics.Debug.Assert(car.Engine IsNot Nothing)

    ' save current engine properties in case they're needed
    Dim powerBefore = car.Engine.Power
    Dim sizeBefore = car.Engine.Size

    Try
        RarelyBadSwapCarEngine(car)
        Dim msg = "Swap succeeded. New engine power source: {0} size {1}"
        Console.WriteLine(msg, car.Engine.Power, car.Engine.Size)
    Catch nullRefEx As NullReferenceException
        ' write exception info to log file
        LogException(nullRefEx)
        ' notify user
        Console.WriteLine("Engine swap failed. Please call your customer rep.")
    Finally
        If car.Engine Is Nothing Then car.Engine = New EngineInfo(powerBefore, sizeBefore)
    End Try

End Sub

Retour au débutEntrées de cette section

Retour au débutSections de cet article

Articles connexes

Instructions de conception pour les exceptions (Instruction de conception .NET Framework)

Gestion et levée des exceptions (Notions de base de l'application .NET Framework)

Procédure : recevoir des notifications d'exception de première chance (guide de développement .NET Framework)

Procédure : gérer des exceptions dans une requête PLINQ (guide de développement .NET Framework)

Exceptions dans les threads gérés (guide de développement .NET Framework)

Exceptions et gestion des exceptions (guide de programmation C#)

Instructions de gestion des exceptions (référence C#)

Instruction Try...Catch...Finally (Visual Basic)

Gestion des exceptions (F#)

Exceptions en C++/CLI

Gestion des exceptions (bibliothèque parallèle de tâches)

Gestion des exceptions (débogage)

Procédure pas à pas : gestion d'une exception d'accès concurrentiel (accès aux données dans Visual Studio)

Procédure : gérer des erreurs et des exceptions qui se produisent avec Databinding (Windows Forms)

Gestion des exceptions dans les applications réseau (XAML) (Windows)

Retour au débutSections de cet article