C#(二十六)之C#异常

简介: 异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。

QQ图片20220426144356.jpg

异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。


异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:trycatchfinallythrow


  • try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。


  • catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。


  • finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。


  • throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。


(一):异常的编程的三种结构


1:捕获异常(try_catch)


try {
     Console.WriteLine("请输入分母:");
     int n = Convert.ToInt32(Console.ReadLine());
     double result = 100 / n;
     Console.WriteLine("结果为:" + result);
}catch(DivideByZeroException){ // 输入0
     Console.WriteLine("分母不能为0");
}catch(FormatException){  // 格式异常
     Console.WriteLine("格式错误");
}

 

这里需要说明一下:catch是可以没有参数的,没有参数就是捕获一切异常。

如果需要知道是因为什么错误导致的异常,就需要带参数。

 

2:收尾工作(try_catc_finally)


try
            {
                Console.WriteLine("请输入分母:");
                int n = Convert.ToInt32(Console.ReadLine());
                double result = 100 / n;
                Console.WriteLine("结果为:" + result);
            }
            catch (DivideByZeroException)
            { // 输入0
                Console.WriteLine("分母不能为0");
            }
            catch (FormatException)
            {  // 格式异常
                Console.WriteLine("格式错误");
            }
            finally { // 无论是否发生异常,都会走进这里。
                Console.WriteLine("我是finally模块");
            }


3:抛出异常(throw)


try
            {
                Console.WriteLine("请输入分母:");
                int n = Convert.ToInt32(Console.ReadLine());
                if( n > 10){
                    // 手动抛出异常
                    throw new IndexOutOfRangeException();
                }
                double result = 100 / n;
                Console.WriteLine("结果为:" + result);
            }catch(IndexOutOfRangeException e){
                // 接收手动抛出的异常,并显示
                //Console.WriteLine("你输入的整数超出了范围");
                Console.WriteLine(e.Message); // 显示出错信息
                Console.WriteLine(e.StackTrace); // 显示出错位置
            }
            catch (DivideByZeroException e)
            { // 输入0
                Console.WriteLine("分母不能为0");
            }
            catch (FormatException e)
            {  // 格式异常
                Console.WriteLine("格式错误");
            }
            finally { // 无论是否发生异常,都会走进这里。
                Console.WriteLine("我是finally模块");
            }

 

(二):.NET中的异常类


这部分请百度搜索MSDN。

 

(三):异常类的属性


Console.WriteLine(e.Message); // 显示出错信息
Console.WriteLine(e.StackTrace); // 显示出错位置


等等……


 

(四):自定义异常


// 自定义异常
    class NegativeNumberExeption : ApplicationException
    {
        // 默认输出
        public NegativeNumberExeption() : base("自定义异常:非法操作"){}//对基类构造函数的赋值
        // 有参数输出
        public NegativeNumberExeption(string message) : base(message){}
    }


目录
相关文章
C# Excel 异常HRESULT 0x800AC472
图1 图2     出现图1的问题,大部分原因是导出excel时一开始就将excel.visible=true,当数据量太大的时候,就会看到数据被一条条的写进excel里面,这个时候随意点击excel就会报出上面的错误。
5692 0
|
4月前
|
安全 测试技术 数据库连接
如何避免 C# 中的异常
【8月更文挑战第27天】
57 2
|
4月前
|
安全 C# 开发者
【C# 多线程编程陷阱揭秘】:小心!那些让你的程序瞬间崩溃的多线程数据同步异常问题,看完这篇你就能轻松应对!
【8月更文挑战第18天】多线程编程对现代软件开发至关重要,特别是在追求高性能和响应性方面。然而,它也带来了数据同步异常等挑战。本文通过一个简单的计数器示例展示了当多个线程无序地访问共享资源时可能出现的问题,并介绍了如何使用 `lock` 语句来确保线程安全。此外,还提到了其他同步工具如 `Monitor` 和 `Semaphore`,帮助开发者实现更高效的数据同步策略,以达到既保证数据一致性又维持良好性能的目标。
57 0
|
6月前
|
开发框架 .NET 程序员
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
掌握C#语言的精髓:基础知识与实用技能详解(数据类型与变量+ 条件与循环+函数与模块+LINQ+异常+OOP)
34 0
|
7月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
363 2
|
7月前
|
安全 编译器 C#
C#中的可空引用类型:减少空引用异常的利器
【1月更文挑战第9天】C# 8.0中引入的可空引用类型特性,它通过在编译时提供更精确的静态分析,帮助开发者减少运行时的空引用异常。文章详细阐述了可空引用类型的工作原理、如何配置项目以使用此特性,以及在实际编码中如何利用可空引用类型提升代码的健壮性和可读性。
|
开发框架 JSON 前端开发
【C#】.net core2.1,自定义全局类对API接口和视图页面产生的异常统一处理
在开发一个网站项目时,异常处理和过滤功能是最基础的模块 本篇文章就来讲讲,如何自定义全局异常类来统一处理
241 0
|
C# 数据处理
C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值)
原文:C#使用拉依达准则(3σ准则)剔除异常数据(.Net剔除一组数据中的奇异值) 1、问题的提出: 电池生产中,遇到一批电池的测量结果数据: 电压值 电池个数 电压值 电池个数 电压值 电池个数 电压值 电池个数 0.
1760 0
|
C#
C#多线程开发-处理异步操作中的异常
C#多线程开发-处理异步操作中的异常
195 0