c# – 使用语句嵌套 – 哪一个不会被处理掉
发布时间:2020-12-15 03:53:34 所属栏目:百科 来源:网络整理
导读:如果我有这样的代码并且在第二个using语句中发生错误,那么第一次使用的dispose方法是否会被调用? using (System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(cnstr)){ cn.Open(); using (SqlTransaction tran = cn.BeginTr
如果我有这样的代码并且在第二个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块或使用语句也更好.内部compilter将生成Try / Finally for using语句但是根据编码标准哪个更好? 解决方法
不,两者都会被召集.仅仅因为在内部语句中调用异常,并不意味着忽略第一个异常.
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(); } 现在应该注意的是,你需要注意的是,无论是什么导致第一个异常都会在调用Dispose()时导致外部using语句出现问题.异常可能会将(实际上)任何对象抛入故障状态,并且调用Dispose可能会导致另一个异常“掩盖”第一个异常.使用using语句时,这是WFC中的问题:http://msdn.microsoft.com/en-us/library/aa355056.aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |