我的代码目前正在
using(var driver = new driver()){something}
我希望能够捕捉异常。但是我只想捕获“driver = new driver”抛出的异常。在线查看我可以找到如何捕获由整个事物或“某事”抛出的异常,但我无法弄清楚如何将try-catch放入“using”参数。
答案 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()
接口