gpt4 book ai didi

c# - 使用带有 try catch 的语句。 using 语句的实例会发生什么?

转载 作者:太空狗 更新时间:2023-10-29 17:31:40 25 4
gpt4 key购买 nike

如果我在 try catch 语句周围有一个 using block ,如果 catch 引发异常,该 using 语句中的对象会发生什么情况?考虑以下代码:

using (IDatabaseConnectivityObject databaseConnectivityObject = new DbProviderFactoryConnectionBasicResponse())
{
try
{
Foo();
}
catch (ArgumentNullException e)
{
throw;
}
}

如果我们假设 Foo() 失败并且异常被触发并有效地中断程序,是否会处理 databaseConnectivityObject?这很重要的原因是该对象具有与之关联的数据库连接。

最佳答案

您可以将 using 视为 try-finally 的简写。因此,您的代码等同于:

IDatabaseConnectivityObject databaseConnectivityObject = new DbProviderFactoryConnectionBasicResponse();
try
{
try
{
Foo();
}
catch(ArgumentNullException e)
{
throw;
}
}
finally
{
if(databaseConnectivityObject != null)//this test is often optimised away
databaseConnectivityObject.Dispose()
}

这样看,您会发现如果异常抛出,Dispose() 确实会被调用,因为 try-finally 在 try-catch 之外。

这正是我们使用 using 的原因。

关于c# - 使用带有 try catch 的语句。 using 语句的实例会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com