Восстановить исключение в блоке try C#

Мой первый вопрос здесь, и я не очень хорош в английском, поэтому, пожалуйста, потерпите меня,

Я пишу приложение, которое позволяет пользователям писать сценарии, которые взаимодействуют с "драйверами", сценарии и драйверы являются отдельными библиотеками классов библиотеки DLL. Эти классы общаются через делегаты обратного вызова, которые передаются, поэтому во время компиляции они не связаны.

пример: (скрипт) ->(программа для связи) ->(драйверы)

Теперь мой вопрос:

Когда сценарий выполняет метод через делегата и выдает исключение, исключение отправляется обратно в сценарий, и пользователь может обработать его, если он перехватит его в блоке try-catch, если нет, то должно быть перехвачено исключение внутри моей программы.

Это работает нормально, как это, но я не знаю, если это правильный путь:

delegate object ScriptCallbackDelegate(string InstanceName, string MethodName, object[] Parameters);

static private object ScriptCallbackMethod(string InstanceName, string MethodName, object[] Parameters)
{
    try
    {
         return InterfaceWithDriver(InstanceName, MethodName, Parameters);
    }
    catch( Exception e )
    {
         try
         {
             throw;
         }
         catch
         {
             Console.WriteLine("Script did not handle exception: " + e.Message);
             return null;
         }
    }

}

2 ответа

Решение
catch (Exception e)
{
    try
    {
        throw;
    }
    catch
    {
        Console.WriteLine("Script did not handle exception: " + e.Message);
        return null;
    }
}

семантически идентичен:

catch (Exception e)
{
    Console.WriteLine("Script did not handle exception: " + e.Message);
    return null;
}

Сценарий никогда не видит этот внутренний throw - его ловит ваш код C#.

Исключение, вызванное в вашем коде, никогда не покидает его, например, в следующем вы можете увидеть подобное поведение.

using System;

namespace Code.Without.IDE
{
    public static class TryCatch
    {
        public static void Main(string[] args)
        {
            try
            {
                try
                {
                    throw new Exception("Ex01");
                }
                catch(Exception ex)
                {
                    try
                    {
                        throw;
                    }
                    catch
                    {
                        Console.WriteLine("Exeption did not go anywhere");
                    }
                }
                Console.WriteLine("In try block");
            }
            catch
            {
                Console.WriteLine("In catch block");
            }
        }
    }
}

генерирует следующий вывод:

------ C: \ abhi \ Code \ CSharp \ без IDE\TryCatch.exe

Исключение никуда не делось

В блоке try

------ Процесс вернул 0

Другие вопросы по тегам