3 votes

Le bloc de capture pour System.ArgumentException existe, mais l'exception n'est pas capturée de toute façon, pourquoi ?

J'ai ce code :

       if (typeof(Enum).IsAssignableFrom(typeof(T)))
        {
            try
            {
                return (T)Enum.Parse(typeof(T), text);
            }
            catch (ArgumentException e)
            {
                return default(T);
            }
        }

Cependant, j'ai reçu l'exception suivante :

Une exception de première chance de type 'System.ArgumentException' s'est produite dans mscorlib.dll. Informations supplémentaires : La valeur demandée 'ABC' n'a pas été trouvée

Comment est-ce possible ? Pourquoi le catch Le bloc ne fonctionne pas ?

9voto

Darin Dimitrov Points 528142

Pourquoi le bloc catch ne fonctionne-t-il pas ?

En catch Le bloc fonctionne parfaitement bien, c'est juste que vous le regardez dans le débogueur de Visual Studio. C'est ce qu'un exception de la première chance moyens. Lorsque vous déboguez, toutes les exceptions sont affichées dans VS, c'est juste que l'exception de la première chance peut disparaître si vous avez une méthode de débogage appropriée. catch clause. Et d'ailleurs, vous pourriez configurer VS de ne pas les montrer.

Oh, et juste un petit mot : dans .NET 4.0, il y a la fonction Enum.TryParse de sorte que vous n'avez même pas besoin de try y catch dans cet extrait particulier.

1voto

Une notification de première chance a pour seul but d'informer le débogueur que l'exception a été levée - cela se produit avant que les cadres de capture ne soient pris en compte. En résumé, votre exception est (probablement) rattrapée.

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