Восстановить исключение в блоке 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