错误的出现并不老是编写程序的人的缘由,有时应用程序会由于应用程序的最终用户引起的动做或运行代码的环境发生错误。不管如何,咱们都应预测应用程序中出现的错误,并相应的进行编码。html
.Net改进了处理错误的方式。C#处理错误的机制能够为每种错误提供自定义处理方式,并把识别错误的代码与处理错误的代码分别开来。编程
在C#中当出现某个特殊的异常错误条件时,就会建立抛出一个异常对象,这个对象包含有助于跟踪问题的信息。.Net提供了许多预约义的异常类,咱们下面看看一些常见特别的异常类吧(异常类太多了,这里就介绍几个常见的)。c#
对于.Net类,通常的异常类System.Exception派生自System.Object,一般不在代码中抛出System.Exception泛型对象,由于他们没法肯定错误状况的本质。数组
在该层次中有两个重要的类,他们派生自System.Exception类:性能
其余可能会用到的异常类包括:学习
异常处理具备性能含义,在常见的状况下,不该该使用异常处理错误。应尽可能编写好避免错误出现的代码。ui
在异常捕获中,咱们能够实现多个catch块来针对不一样的错误作出对应的错误处理。下面咱们看一个例子:编码
class Program { static void Main(string[] args) { while (true) { try { string userInput; Console.WriteLine("请输入0-5之间任意一个数字:"); userInput = Console.ReadLine(); if (string.IsNullOrWhiteSpace(userInput)) { break; } if (int.TryParse(userInput, out int index)) { if (index < 0 || index > 5) { throw new IndexOutOfRangeException($"你输入的数字是{index}"); } Console.WriteLine($"你输入的数字是{index}"); } else { throw new Exception("请输入数字"); } } catch (IndexOutOfRangeException ex) { Console.WriteLine($"你输入的数字不在此范围内.{ex.Message}"); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { Console.WriteLine("谢谢合做"); } } } }
在此事例中,定义了两个catch块。若是输入的超过规定返回的数字,则会抛出超出范围的错误也就进入对应的catch块。而输入的非数字也就进入了另一个catch块进行处理。spa
下面咱们看一看关于System.Exception属性。熟悉了解其中熟悉能更好的去观察理解抛出的异常错误。设计
自从C#6开始就支持异常过滤器。Catch块仅在过滤器但会true时执行。捕获不一样的异常类型时,能够有行为不一样的代码块。在某些状况下,catch块基于异常的内容执行不一样的操做。下面咱们看下如何来使用异常过滤器吧:
public class MyIndexOutOfException :SystemException { public MyIndexOutOfException(string message) : base(message) { } public int ErrorCode { get; set; } } class Program { static void Main(string[] args) { try { int steInput = 12; if (steInput > 10) { throw new MyIndexOutOfException("数据超出了范围") { ErrorCode = 1 }; } } catch (MyIndexOutOfException ex) when (ex.ErrorCode!=1) { Console.WriteLine("出现了自定义错误"); } catch (MyIndexOutOfException ex) when (ex.ErrorCode == 1) { Console.WriteLine(ex.Message); } catch (Exception ex) { throw; } } }
上面例子中,自定义了一个异常处理,同时增长ErrorCode,以此来做为过滤条件,利用关键字When+条件来进行过滤。
本篇文章介绍了异常处理错误的状况及机制,咱们不只能够输出代码好难过的通常错误代码,也能够输出咱们本身定义的特殊错误状况。不管编程技术有多好,程序都必须能处理可能出现的任何错误。对不一样的错误采起相应的应对措施,才是正确编码的其中一步。
不是井里没有水,而是你挖的不够深。不是成功来得慢,而是你努力的不够多。
欢迎你们扫描下方二维码,和我一块儿学习更多的C#知识