Le code suivant génère un NullReferenceException
, mais n'est pas pris par le bloc d'essai (aussi bien en mode Debug
et Release
):Pourquoi l'exception n'est-elle pas détectée?
using System;
namespace ExceptionTest {
public class Program {
public static void Main(string[] args) {
String text = null;
try {
if (text.Equals("t1")) {
Console.WriteLine("r1");
} else {
Console.WriteLine("r2");
}
} catch(Exception ex) {
Console.WriteLine("Exception catched!");
}
}
}
}
Au lieu les pauses du programme et la ligne incriminée est mis en évidence:
Pourquoi?
Mise à jour: représentation textuelle de l'exception comme suggéré par Scott:
System.NullReferenceException occurred
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=ExceptionTest
Vous * probablement * avez votre débogueur configuré pour briser les exceptions de première chance. Si vous exécutez ceci sans un débogueur joint, est-ce qu'il imprime "Exception attrapé"? – vcsjones
aussi avez-vous essayé d'utiliser '==' si je ne me trompe pas, il émet des exceptions différemment que 'string.equals (string)' – Andrew
Il est généralement mauvais d'attraper des exceptions générales comme ça. Cela peut conduire à un comportement sparatique et introuvable dans votre code. Sans parler des exceptions sont extrêmement non-performant. Si une variable peut être nulle, vous devriez vérifier une valeur nulle avant d'y accéder! –