gpt4 book ai didi

c# - 嵌套的 using 语句 - 哪一个不会被处理掉

转载 作者:太空狗 更新时间:2023-10-29 21:06:38 25 4
gpt4 key购买 nike

如果我有这样的代码,并且在第二个 using 语句中发生错误,是否不会调用第一个 using 的 dispose 方法?

using (System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(cnstr))
{
cn.Open();

using (SqlTransaction tran = cn.BeginTransaction(IsolationLevel.Serializable))
{

--编辑--

另外,是写 Try/Finally block 还是 using 语句更好。内部编译器会为 using 语句生成 Try/Finally,但根据编码标准,哪个更好?

最佳答案

不,两者都会被调用。仅仅因为在内部语句中调用了异常,并不意味着第一个被忽略。

using 语句只是另一种语法:

var iDisposableItem = new Item();

try
{
......
}
finally
{
iDisposableItem.Dispose();
}

所以在你的例子中:

var iDisposableItem = new Item();

try
{

var iDisposableItem2 = new Item();

try
{
throws exception
}
finally
{
iDisposableItem2 .Dispose();
}

}
finally
{
iDisposableItem.Dispose();
}

现在应该注意和必须注意的是,无论第一个异常是什么原因引起的,都可能导致外部 using 语句在调用 Dispose() 时出现问题。该异常可能会使(实际上是任一)对象进入故障状态,并且调用 Dispose 可能会导致另一个不同的异常,该异常“屏蔽”了第一个异常。这是 WFC 中使用 using 语句时的陷阱:http://msdn.microsoft.com/en-us/library/aa355056.aspx

关于c# - 嵌套的 using 语句 - 哪一个不会被处理掉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6062640/

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