如果Catch块本身发生exception,那么如何在C#中处理它?
//我在Catch Block中使用了wriiten代码
try { } catch(Excepetion ex) { // I have written code Here If Exception Occurs here then how to handle it. }
你可以在catch块中放置一个try catch,或者你可以再次抛出exception。 最好最后使用try catch 阻塞 ,这样即使catch块中发生exception,最终也会执行块代码。
try { } catch(Excepetion ex) { try { } catch { } //or simply throw; } finally { // some other mandatory task }
最后, 在某些例外情况下,块可能无法执行 。 您可能会看到约束执行区域以获得更可靠的机制。
try { // Some code here } catch (Exception ex) { try { // Some more code } catch (Exception ex) { } }
最好的方法是为不同的应用程序层开发自己的exception,并将其抛出内部exception。 它将在您的应用程序的下一层处理。 如果你认为,你可以在catch块中获得一个新的Exception,只需重新抛出此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); }
对于可能在catch
块中抛出exception的代码行,可以创建额外的try..ctach块。 除了考虑finally
阻止,还有线路在那里运行。 对于finally
块,可能会出现同样的问题。 因此,如果您的代码可能在finally
块中抛出一些exception,您还可以在那里添加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开始,硬件语言的一般设计是在三重故障上复位芯片。
您可能正好设计出双重故障的方法。 在这种情况下,不要为了停止处理/向用户报告错误而感到害怕。 如果你碰到一个例子,你捕获IOexception(读/写数据),然后尝试关闭你正在读取的流,并且也失败了,它不是一个糟糕的模式,会大大失败并发出警告一个真正特殊的事情发生的用户。
捕获块在任何特定方面都不是特殊的。 您将不得不使用另一个try / catch块或不处理错误。
我的朋友Atul ..如果你在catch块中写try..catch,如果在内部try..catch中再次发生exception,同样的问题将再次引发。 因此,解决此问题,您可以在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
让我知道这是否适合你.. 🙂