我在这里提出的第一个问题是英语不是很好,所以请耐心等待我,
我正在编写一个允许用户编写与'drivers'接口的脚本的应用程序,脚本和驱动程序都是独立的类库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;
}
}
}
答案 0 :(得分:3)
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#代码捕获。
答案 1 :(得分:1)
您的代码中导致的异常永远不会离开它,例如在下面你可以看到类似的行为。
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 block中
------进程返回0