C# 使用()尝试捕获
我的代码目前是C# 使用()尝试捕获,c#,C#,我的代码目前是 using(var driver = new driver()){something} 我希望能够捕获异常。但是,我只想捕获“driver=newdriver”引发的异常。通过在线查看,我可以找到如何捕获整个事件或“某物”引发的异常,但我无法确定如何将try捕获放入“using”参数中 就这么做吧: Driver driver = null; try { driver = new Driver(); } catch() { // do whatever, th
using(var driver = new driver()){something}
我希望能够捕获异常。但是,我只想捕获“driver=newdriver”引发的异常。通过在线查看,我可以找到如何捕获整个事件或“某物”引发的异常,但我无法确定如何将try捕获放入“using”参数中 就这么做吧:
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
}
这是一个很奇怪的要求,但不管你怎么说 您应该使用完全摆脱
,自己处理dispose(具有相同的结果)
这就是你想要的:
driver driver = null;
try
{
try
{
driver = new driver();
}
catch(Exception ex)
{
// Here is your specific exception.
}
// Do something
}
finally
{
if(driver != null)
driver.Dispose();
}
“using”子句的主要功能是在子句内的过程完成后处理托管代码资源。它在其中“隐藏”了一个try-catch块,但是如果您真的想处理错误,您需要自己处理
例如
在处理异常后,您应该通过调用.dispose()
来处理未使用的资源,假设后者是托管代码资源并封装了IDisposable
接口,您可以添加一个方法来构造驱动程序并将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
}
当然,如果您这样做,当您的某个代码在使用块内部执行时,驱动程序可能为空,因此您需要对此进行检查,例如:
using(var driver = CreateDriver())
{
if (driver != null)
{
// something
}
}
不要使用使用。自己动手使用主要用于强制对对象调用disposed。它不会影响您的try-catch实现。“我需要使用,因为“driver=newdriver”打开了一个新窗口”-我可以建议更改该设计吗?在我看来,构造函数调用打开一个新窗口是很奇怪的。使用(var driver=CreateDriver())
并在CreateDriver
方法中放入try/catch如何?@Joe-这是一个答案。你应该确保driver
在中不为null
使用@himbrombee如果catch()是正确的,我假设catch()将是致命的,如在另一次投掷、返回或其他情况下……“使用”用于强制处置,“驱动程序”在使用后会被处置吗?还是我们用错了?@Lali我真的不明白你的意思。。。是的,这就是使用
的目的。它强制释放驱动程序实例。“它在其中“隐藏”了一个try-catch块”实际上它“隐藏”了一个try/finally块。是的……我无意中键入了catch……对不起,手动使用Dispose()
不是一个好方法。您可以使用using-insidetry/catch
,因为它将在内部创建try/finally
。如果未实现using子句,则从不鼓励它,只是尝试给出一个示例,当需要显式处理异常时,需要根据询问的问题手动处置托管代码资源。但是你有筑巢。如果开发人员在给定的时间内没有问题,那么我可以:)
using(var driver = CreateDriver())
{
if (driver != null)
{
// something
}
}