Looking for c# Keywords? Try Ask4Keywords

C# Language Совокупные исключения / множественные исключения из одного метода


пример

Кто говорит, что вы не можете бросить несколько исключений в один метод. Если вы не привыкли играть с AggregateExceptions, у вас может возникнуть соблазн создать свою собственную структуру данных, чтобы представить, что многие вещи идут не так. Есть, конечно, другая структура данных, которая не является исключением, была бы более идеальной, такой как результаты проверки. Даже если вы играете с AggregateExceptions, вы можете быть на стороне приема и всегда обращаться с ними, не понимая, что они могут вам пригодиться.

Весьма правдоподобно, что метод выполняется, и даже если это будет провал в целом, вы захотите выделить несколько вещей, которые поступили не так в тех исключениях, которые были выбраны. В качестве примера это поведение можно увидеть с помощью методов параллельных вычислений, которые были разбиты на несколько потоков, и любое число из них могло генерировать исключения, и об этом необходимо сообщать. Вот глупый пример того, как вы могли бы воспользоваться этим:

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