0
votes

C # ne pas entrer d'exception après avoir utilisé

Je suis un programmeur débutant et j'ai été confronté à des exceptions récemment. J'ai fait ce petit test ci-dessous et la sortie que j'ai reçue n'était pas la même que celle que j'attendais.

static void Main(string[] args)
    {
        ushort var = 65535;
        try
        {
            checked { var++; }
        }
        catch (OverflowException)
        {
            Console.WriteLine("Hello!");
            throw;
        }
        catch
        {
            Console.WriteLine("Here I am!");

        }
    }
  • Essayez de var ++, échouez et créez une overflowException; li>
  • Entrez Catch (OverflowException) et écrivez "Bonjour!"; Li>
  • jette une exception et entrez attraper; li>
  • écrire "Ici je suis!". Li> ul>

    Cependant, je n'ai eu que sur l'écran "Bonjour!". P>

    Edit: Merci à ceux qui ont commenté. Je pense que je commence à comprendre. Cependant, ma confusion est originaire de ce livre que je lis: C # 4.0. P>

    Je pourrais montrer le texte, mais il est en portugais. Je vais traduire ce qu'il dit: "Parfois, il est utile de propager l'exception à travers plusieurs captures. Par exemple, SUPOSSE SUPOSSE est nécessaire de montrer un message d'erreur spécifique en raison du fait que" l'idade "est invalide , mais nous devons toujours fermer le programme, en tant que partie dans la capture mondiale. Dans ce cas, il est nécessaire de propager l'exception après l'exécution du premier bloc de captures. Pour ce faire, il suffit de faire un simple lancer sans arguments. " p>

    exemple du livre p>

    Dans cet exemple du livre, vous pouvez voir le programmeur faire la même chose que j'ai faite. Au moins cela ressemble à ça. Est-ce que je manque quelque chose? Ou est le problème? P>

    J'espère que vous pourrez m'aider. Merci! P> p>


5 commentaires

Vous devez utiliser jeter un lancer lorsque votre code dans une méthode et appelé méthode traitera votre lancer


En écrivant lancer dans le bloc de capture, vous retirez l'exception. Il ne sera pas pris au prochain bloc de capture mais il sera pris dans un bloc de capture externe s'il y en a.


Si vous souhaitez que le code de la 2e capture soit exécuté, quelle que soit l'exception ou s'il n'y a pas d'exception, essayez d'utiliser enfin .


Cela ne va pas attraper le lancer, où le livre le dit-il?


"Parfois, il est utile de propager l'exception à travers plusieurs captures" qui devraient lire "plus d'un bloc d'essai". Chaque partie de cette section semble confondre la capture avec le bloc d'essai qu'il fait partie. Probablement une erreur de traduction. Sauf pour cette erreur, il est juste BTW. Y compris utiliser «lancer», comme c'est la voie à repasser qui ne change pas la trace de la pile.


3 Réponses :



2
votes

En bref, vous le faites mal. Visons-vis la documentation

Manipulation d'exception (Guide de programmation C #)

Les blocs de capture multiples avec différents filtres d'exception peuvent être chaînés ensemble. Les blocs de capture sont évalués de haut en bas dans votre code, mais un seul bloc de capture est exécuté pour chaque exception que est lancé .

Bien que cela ne dise pas spécifiquement que vous ne pouvez pas attraper une exception qui a été rejetée dans un filtre d'exception, le fait est que vous ne pouvez pas. Ce serait un cauchemar et avoir des résultats compliqués et inattendus.

C'est tout à dire, vous aurez besoin d'une autre couche (interne ou externe) de essayer de prendre pour attraper l'exception dans attrape (OverflowException)


0 commentaires

0
votes

Vous obtiendrez la sortie que vous attendez si vous nidez try / attrape blocs: xxx


0 commentaires