c# – 使用语句嵌套 – 哪一个不会被处理掉

前端之家收集整理的这篇文章主要介绍了c# – 使用语句嵌套 – 哪一个不会被处理掉前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有这样的代码并且在第二个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

原文链接:https://www.f2er.com/csharp/93484.html

猜你在找的C#相关文章