如果Catch块本身发生异常,那么如何在C#中处理它?

时间:2012-11-28 04:52:03

标签: c# asp.net

//我在Catch Block中编写了代码

 try
  {
  }
  catch(Excepetion ex)
  {
  // I have written code Here If Exception Occurs here then how to handle it.
  }

7 个答案:

答案 0 :(得分:8)

你可以在catch块中放置一个try catch,或者你可以再次抛出异常。使用try catch更好地拥有finally阻止,这样即使catch块中发生异常,最终也会执行块代码。

try
  {
  }
catch(Excepetion ex)
  {
     try
        {
        }
     catch
        {
        }
   //or simply throw;
  }
finally
{
  // some other mandatory task
}

最后阻止可能无法获得executed in certain exceptions。您可能会看到Constrained Execution Regions更可靠的机制。

答案 1 :(得分:5)

try
{
    // Some code here
}
catch (Exception ex)
{
    try
    {
        // Some more code
    }
    catch (Exception ex)
    {
    }
}

答案 2 :(得分:5)

最好的方法是为不同的应用程序层开发自己的异常,然后抛出内部异常。它将在您的应用程序的下一层处理。如果你认为,你可以在catch块中获得一个新的Exception,只需重新抛出此异常而不进行处理。

让我们假设您有两个层:业务逻辑层(BLL)和数据访问层(DAL),并且在DAL的catch块中您有例外。

<强> DAL:

try
{
}
catch(Excepetion ex)
{
  // if you don't know how should you handle this exception 
  // you should throw your own exception and include ex like inner exception.
   throw new MyDALException(ex);
}

<强> BLL:

try
{
  // trying to use DAL
}
catch(MyDALException ex)
{
  // handling
}
catch(Exception ex)
{
   throw new MyBLLException(ex);
}

答案 3 :(得分:2)

对于可能在catch块中引发异常的代码行,请使用额外的显式try..ctach块。除了考虑使用finally阻止之外,还要在某些地方运行线路。 finally块可能会出现同样的问题。因此,如果您的代码可能会在finally块中引发一些异常,那么您也可以在那里添加try..catch。

try
{
}
catch (Exception ex)
{
    try
    {
        // code that is supposed to throw an exception
    }
    catch (Exception ex1)
    {
    }
    // code that is not supposed to throw an exception       
}
finally
{
    try
    {
        // code that is supposed to throw an exception
    }
    catch (Exception ex1)
    {
    }
    // code that is not supposed to throw an exception       
}

答案 4 :(得分:2)

双重故障通常发生在精心设计的3g编程语言中。从保护模式和286开始,硬件语言的一般设计是在三重故障上复位芯片。

你可能正好设计出双重故障的方法。在这种情况下,不要为了停止处理/向用户报告错误而感到害怕。如果您遇到一种情况,例如,您捕获IO异常(读取/写入数据)然后尝试关闭您正在读取的流,并且也会失败,那么它并不是一个糟糕的模式会显着失败并发出警告一个真正特殊的事情发生的用户。

答案 5 :(得分:1)

catch块在任何特定方面都不是特殊的。您将不得不使用另一个try / catch块或不处理错误。

答案 6 :(得分:0)

我的朋友Atul ..如果你在catch块中写try..catch,如果内部try..catch再次发生异常,同样的问题将再次引发。 因此,解决此问题,您可以在Global.asax

中处理应用程序级事件中的这些错误

检查以下链接..

http://msdn.microsoft.com/en-us/library/24395wz3%28v=vs.100%29.aspx

http://msdn.microsoft.com/en-us/library/fwzzh56s%28v=vs.80%29.aspx

让我知道这是否适合你......:)