作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如果我有这样的代码,并且在第二个 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/
我正在编写一个快速的 preg_replace 来从 CSS 中删除注释。 CSS 注释通常有这样的语法: /* Development Classes*/ /* Un-comment me for
使用 MySQL,我有三个表: 项目: ID name 1 "birthday party" 2 "soccer match" 3 "wine tasting evening" 4
我是一名优秀的程序员,十分优秀!