繁体   English   中英

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

[英]If exception occurs in Catch block itself then how to handle it in C#?

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

 try {

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

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

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

在某些异常中可能不会执行finally 块。 您可能会看到受约束的执行区域以获得更可靠的机制。

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

假设您有两层:业务逻辑层 (BLL) 和数据访问层 (DAL),在 DAL 的 catch 块中,您有一个异常。

达尔:

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);
}

布莱尔:

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

对于可能在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       
}

双重故障经常发生在设计良好的 3g 编程语言中。 由于保护模式和286,硬件语言的一般设计是在三重故障时复位芯片。

您可能可以设计出摆脱双重错误的方式。 在这种情况下,不要因为不得不做一些事情来停止处理/向用户报告错误而感到难过。 如果您遇到这样的情况,例如,您捕获 IO 异常(读取/写入数据),然后尝试关闭您正在读取的流,但也失败了,这不是一个糟糕的模式,它会显着失败并发出警告用户认为发生了真正异常的事情。

catch 块在任何特定方面都没有什么特别之处。 您将不得不使用另一个 try/catch 块或不处理错误。

我的朋友 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM