C# Language Exceptions globales / exceptions multiples d'une méthode


Exemple

Qui dit que vous ne pouvez pas lancer plusieurs exceptions dans une méthode. Si vous n'avez pas l'habitude de jouer avec AggregateExceptions, vous pouvez être tenté de créer votre propre structure de données pour représenter de nombreuses erreurs. Il y a bien sûr une autre structure de données qui n'est pas une exception serait plus idéale comme les résultats d'une validation. Même si vous jouez avec AggregateExceptions, vous êtes peut-être du côté de la réception et vous les manipulez toujours sans vous rendre compte qu'elles peuvent vous être utiles.

Il est tout à fait plausible de faire exécuter une méthode et même si cela sera un échec dans son ensemble, vous voudrez mettre en évidence plusieurs choses qui ont mal tourné dans les exceptions lancées. A titre d'exemple, ce comportement peut être vu avec le fonctionnement des méthodes Parallel, une tâche divisée en plusieurs threads et un nombre quelconque d'entre elles pouvant générer des exceptions et cela doit être signalé. Voici un exemple stupide de la façon dont vous pourriez en bénéficier:

    public void Run()
    {
        try
        {
            this.SillyMethod(1, 2);
        }
        catch (AggregateException ex)
        {
            Console.WriteLine(ex.Message);
            foreach (Exception innerException in ex.InnerExceptions)
            {
                Console.WriteLine(innerException.Message);
            }
        }
    }

    private void SillyMethod(int input1, int input2)
    {
        var exceptions = new List<Exception>();

        if (input1 == 1)
        {
            exceptions.Add(new ArgumentException("I do not like ones"));
        }
        if (input2 == 2)
        {
            exceptions.Add(new ArgumentException("I do not like twos"));
        }
        if (exceptions.Any())
        {
            throw new AggregateException("Funny stuff happended during execution", exceptions);
        }
    }