C# Language Eccezioni aggregate / più eccezioni da un metodo

Esempio

Chi dice che non puoi lanciare più eccezioni con un solo metodo. Se non sei abituato a giocare con AggregateExceptions potresti essere tentato di creare la tua struttura dati per rappresentare molte cose che vanno storte. Ovviamente ci sono altre strutture dati che non sono un'eccezione, ma sono ideali come i risultati di una convalida. Anche se giochi con AggregateExceptions potresti essere dal lato ricevente e gestirli sempre senza rendertene conto che possono esserti utili.

È abbastanza plausibile che un metodo venga eseguito e anche se sarà un fallimento nel suo insieme, vorrai evidenziare più cose che sono andate storte nelle eccezioni generate. Ad esempio, questo comportamento può essere visto con il modo in cui i metodi paralleli funzionano come un'attività suddivisa in più thread e qualsiasi numero di essi potrebbe generare eccezioni e questo deve essere segnalato. Ecco un esempio sciocco di come potresti trarne beneficio:

    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);
        }
    }