Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 操作抛出异常的方式是否不同?_C#_Exception Handling_.net 3.5 - Fatal编程技术网

C# 操作抛出异常的方式是否不同?

C# 操作抛出异常的方式是否不同?,c#,exception-handling,.net-3.5,C#,Exception Handling,.net 3.5,考虑以下代码: public void RunScriptBuild() { try { _helper.RunScriptBuild(); //throws FileNotFoundException } catch (Exception ex) { LogException(ex); } } private void LogException(Exception ex) { //write to log

考虑以下代码:

public void RunScriptBuild()
{
    try
    {
        _helper.RunScriptBuild(); //throws FileNotFoundException
    }
    catch (Exception ex)
    {
        LogException(ex);
    }
}

private void LogException(Exception ex)
{
    //write to log file
    ExceptionPolicy.HandleException(ex, "Logging Policy");
}
这工作非常好,我得到了大量的信息写入我的日志文件。 相反,我的实际代码如下所示:

public void RunScriptBuild()
{
    RunAction(_helper.RunScriptBuild); 
}

private void RunAction(Action task)
{
    try
    {
        task(); //still throws FileNotFoundException
    }
    catch (Exception ex)
    {
        LogException(ex);
    }
}

private void LogException(Exception ex)
{
    //doesn't write to log file
    ExceptionPolicy.HandleException(ex, "Logging Policy");
}
因此,现在当调用
RunAction
并抛出错误时,不会向我的日志文件写入任何内容。通过它,
LogException
确实会被调用,我可以毫无问题地跳过它。我无法进入HandleException,因为它是MS Enterprise应用程序块的一部分。但是我的老板不喜欢我这样做,他说我需要使用更通用的方法,因为它们更灵活,并在这里提出了第二个代码块


我只是看了看,但帮不了我多少忙。我使用的是.NET3.5,因此没有可用的AggregateException。在“如何处理操作引发的异常”方面似乎找不到太多信息……

这与异常是从委托引发的事实无关


这可能与您调用不同的实际方法有关,可能导致抛出不同的异常,从而进行不同的处理,也可能是一些更改,可能是环境方面的,这导致您的异常处理程序在这两种情况下的行为有所不同,因为某种原因,完全不涉及通过直接方法调用委托的使用。

最后,两个代码库都调用了相同的函数,
\u helper。RunScriptBuild
最终仍在做与我使用
RunScript时相同的事情(字符串路径){Process.Start(path);}
方法。我想我必须试着深入挖掘…好吧,你回答了我的问题,所以我将把这个标记为解决方案。我问题的根源是我使用的框架在抛出异常的类和捕获异常的类中都需要一个特定的
using
语句。所以我真的不知道为什么第一个b锁工作了,第二个没有…但我想我现在把它修好了。