在Using()中尝试捕获

时间:2018-01-29 09:48:24

标签: c#

我的代码目前正在

using(var driver = new driver()){something}

我希望能够捕捉异常。但是我只想捕获“driver = new driver”抛出的异常。在线查看我可以找到如何捕获由整个事物或“某事”抛出的异常,但我无法弄清楚如何将try-catch放入“using”参数。

4 个答案:

答案 0 :(得分:5)

这是一个非常奇怪的要求,但无论你的电话是什么。

你应该完全摆脱using,并自己处理处理(具有相同的结果)。

这就是你想要的:

driver driver = null;

try
{
    try
    {
        driver = new driver();
    }
    catch(Exception ex)
    {
        // Here is your specific exception.
    }

    // Do something
}
finally
{
    if(driver != null)
        driver.Dispose();
}

答案 1 :(得分:3)

就这样做:

Driver driver = null;

try
{
    driver = new Driver();
}
catch()
{
    // do whatever, throw, fail, return...
}

// if you did not break out of your logic in the catch (why not?)
// add an if(driver != null) before you proceed

using(driver)
{
    // something
}

答案 2 :(得分:1)

你可以添加一个方法来构建你的驱动程序并将你的try / catch放在那里:

private static Driver CreateDriver()
{
    try
    {
        return new Driver();
    }
    catch(Exception ex)
    {
        // whatever other exception handling you want
        return null;
    }
}    

using(var driver = CreateDriver())
{
    // something
}

当然,如果你这样做,当something代码在using块内执行时,driver可能为空,所以你需要检查这个,例如:

using(var driver = CreateDriver())
{
    if (driver != null)
    {
        // something
    }
}

答案 3 :(得分:-1)

"使用"子句,主要功能是在子句中的进程完成后配置托管代码资源。它"隐藏"在其中尝试catch块,但如果您真的想要处理错误,则需要自己完成。

例如

ObservableCollection

处理异常后,应通过调用Try { //do stuff } catch (exception ex) { //handle exception //resource.Dispose(); } 来处置未使用的资源,假设后者是托管代码资源并封装.Dispose()接口