catch块中如何处理异常?我正在尝试找到处理异常的理想方法。我在谷歌上搜索并阅读到我应该将trycatch放在catch块中来处理,但是如果嵌套块本身发生任何异常会发生什么。尝试{inta=10;整数b=0;intc=a/b;控制台.WriteLine(c);控制台.ReadKey();}catch(Exceptionex){inta=10;整数b=0;c=a/b;Console.WriteLine(ex.Message.ToString());控制台.ReadKey();}最后{Console.WriteLine("SomeException");在谷歌上我读到它应该被装饰如下:如果我这样做那么它就会卡在一个无限的try-catch块中。我认为有一些更好或正确的方法来处理这种情况。首先,您需要知道什么是try、catch和finallywork让我们开始吧:Try:在这个块中,我们可以编写有可能抛出一些错误的代码(更好的方法是在其中编写代码部分。)Catch:负责用于显示错误以及如果出现错误该怎么办(假设您的代码10/0抛出错误,可以在本节中处理。)最后:本节中编写的代码将执行遇到的任何错误天气。现在,对于你的查询,最好在最后使用If...else,并且将代码放在该部分中将保留在trycatch块中。例如:boolflagCatch=false;尝试{inta=10;整数b=0;intc=a/b;控制台.WriteLine(c);控制台.ReadKey();}catch(Exceptionex){//错误处理flagCatch=true;Console.WriteLine(ex.Message.ToString());控制台.ReadKey();}finally{try{if(flagCatch){//Code}else{//错误未出现时的代码}}catch(Exceptionerr){//错误处理}}我认为有一些更好或正确的方法来处理这种情况.无意这样做,但简单地说,首先不要让异常发生。try...catch是一种语言结构,可确保您处理边缘情况或未首先缓解和设计的错误,因此这是特殊代码的原因。在您的代码中,您只是抛出除以0的错误,但在现实世界中,您希望在处理实际的特殊代码之前处理该错误并提醒用户(或开发人员、服务器或其他任何人),例如:staticvoidPrintError(){Console.WriteLine("您必须输入介于{0}和{1}之间的有效数字,不包括0",int.MaxValue,int.MinValue);}staticvoidMain(string[]args){try{inta=10;整数b=0;打印错误();//告诉用户输入有效数字while(b==0){stringuser_input=Console.ReadLine();if(int.TryParse(user_input,outb)){//这是一个实际数字吗?if(b==0){//没有0记住用户!??打印错误();}else{//好的,一切都检查好了,所以做系统实际可以处理而不会抛出错误的事情Console.WriteLine("a/b={0}",(a/b));}}else{PrintError();}}}catch(Exceptionex){Console.WriteLine("发生异常情况:{0}",ex);这个例子可以进一步简化,但事实证明,除了实际发生异常的东西(即内存不足或其他系统错误)之外,没有实际发生的异常。在具有多个类的较大代码库的情况下,异常处理程序和终结器将是您可以清理在代码的其他区域获取的资源的地方,例如关闭套接字或文件句柄以确保数据不会丢失。如果异常处理程序中发生错误(它可能并且确实发生了),您需要知道这一点,并了解在这种情况下可能发生的情况。如果C#应用程序使用.NET框架,在异常中抛出的异常只会导致应用程序崩溃,并显示内部异常堆栈跟踪(与“外部”异常相反,后者可能与实际异常更相关),如果不处理。有许多处理异常的“错误”方法(比如根本不处理异常),但考虑到异常的可变性,没有真正“正确”的方法。希望有所帮助。我支持TiesonT.的评论。在我看来,这是一个设计问题。我还可以用if语句构建一个示例-->如果出现问题,我进行故障处理-->如果故障处理出错,我进行故障处理,如果故障处理出错...代码更具可读性你可以尝试“隐藏”try-catch块,例如:staticvoidPerformInTryCatch(Actionaction,Tobj)whereTException:Exception{try{action(obj);}catch(TExceptionexception){//执行一些日志记录}}希望得到帮助。正确地,catch块的内容也应该受到try-catch块的保护。但是当您没有办法处理和解决错误时,剩下的就是将错误从堆栈中抛出以结束该行处理,通常记录发生的事情并向用户显示错误消息。一个问题是catch中发生的错误意味着您现在有两个异常和只有一个抛出机制。如果抛出并记录了内部异常,则导致外部异常的问题就丢失了,反之亦然。一个简单的解决方案是使用AggregateException:}catch(Exceptionex){try{HandleMyCodeException();}catch(ExceptionhandlerEx){thrownewSystem.AggregateException(ex,handlerEx);}//扔;这样,如果您的处理程序(catch中的代码)解决了程序可以继续的问题,但如果处理程序存在问题,则主要异常和次要异常都可以抛出一个。如果您的处理程序正在进行清理,则取消对抛出的注释;语句将原始异常原样传递到堆栈上。如果我们可以将handlerEx的内部异常设置为ex会更容易,但是InnerException属性是只读的。以上就是C#学习教程:catch块中的异常如何处理?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
