C#中的异常处理

  • 异常的概念

异常实际上是程序中错误导致中断了正常的指令流的一种事件.(你可以认为异常是任何中断正常程序流程的错误条件)。

产生异常的条件:

1:想打开的文件不存在

2:网络连接中断

3:调用空引用

4:除0异常

。。。。

由于C#是面向对象,所有所有的错误被封装在异常对象中 一旦错误发生,将接收到一个特定的异常对象。

  • 异常类

.NET Framework 类库中的所有异常都派生于 Exception 类,异常包括系统异常和应用异常。

默认所有系统异常派生于 System.SystemException,所有的应用程序异常派生于 System.ApplicationException。

系统异常一般不可预测,比如内存堆栈溢出,空对象引用,权限限制,硬件读取错误等等

应用程序异常一般可以预测,比如文件对象找不到啦,值不在范围内啦,数据类型不一致等等,设计,处理逻辑可以判断的。

常见的异常类如下图所示:

常见的系统异常类如下表所示:

异常类

说明

System.OutOfMemoryException

用 new 分配内存失败

System.StackOverflowException

递归过多、过深

System.NullReferenceException

对象为空

Syetem.IndexOutOfRangeException

数组越界

System.ArithmaticException

算术操作异常的基类

System.DivideByZeroException

除零错误

三、异常处理

在 C# 语言中异常与异常处理语句即 try ... catch... finally

在上述异常处理的形式中所用到关键字其含义如下: try:用于检查发生的异常,并帮助发送任何可能的异常。

catch:以控制权更大的方式处理错误,可以有多个 catch 子句。

finally:无论是否引发了异常,finally 的代码块都将被执行。

举例如下:

四、自定义异常

虽然在 C# 语言中已经提供了很多异常处理类,但在实际编程中还是会遇到未涉及的一些异常处理。

例如想将数据的验证放置到异常处理中,即判断所输入的年龄必须为 18〜45,此时需要自定义异常类来实现。

自定义异常类必须要继承 Exception 类。

自定义异常的语句如下:

class 异常类名 :Exception{}

抛出自己的异常,使用关键字throw 。

语句如下:

throw new 自定义异常类(参数列表);

举例如下: 限制用户输入数字的范围为1-100。

自定义异常类:

//InputException.cs

/// <summary>

/// 自定义异常类

/// 当输入值不满足要求时抛出

/// </summary>

class InputException:Exception

{

/// <summary>

/// 构造方法

/// <summary>

///<param name=”inputNum></param>

public InputException(int inputNum):base(string.Format("异常:输入范围为1‐ 100,值为{0}",inputNum)){}

}

class Program

 {

 static void Main(string[] args)

 {  int input = 0;

  while(true)

 { 

try

 {

input = GetUserInput();

break; 

}

catch(InputException ex)

{ Console.WriteLine(ex.Message);  }

catch(FormatException) {

 Console.WriteLine("输入的内容不是数字"); }

catch(Exception ex)

{ Console.WriteLine(ex.Message);

Console.WriteLine("发生异常,请重试!");

}

}

Console.WriteLine("Input Value :{0}", input);

}

static int GetUserInput() {

Console.WriteLine("请输入一个数字:");

string str = Console.ReadLine();

int input = int.Parse(str);

if (input < 1 || input > 100)

{ throw new InputException(input); }

return input;

}

}

以上就是我的分享,新手上道,请多多指教。

如果有更好的方法或不懂得地方欢迎在评论区教导和提问喔!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值