C#异常处理总结及简单实例

C#异常处理总结及简单实例

本文介绍C#中异常处理的相关知识,包括什么是异常、异常的分类、异常的捕获和处理、如何自定义异常等内容,并通过示例代码进行演示说明。

什么是异常

在C#中,异常是指在程序运行时某些意料之外的问题导致程序无法继续执行的情况。比如:代码中试图打开不存在的文件,或是试图进行无效的计算等。在这些情况下,程序会抛出一个异常,来提示程序员有错误出现。

异常分类

在C#中,异常可以分为两类:系统异常和自定义异常。

系统异常

系统异常是由.NET框架代码中的错误情况引起的异常,比如:

  • NullReferenceException(空指针异常):当试图引用一个空对象的成员时,会引发该异常。
  • IndexOutOfRangeException(索引超出范围异常):试图使用一个不存在于数组中的索引访问数组时,会引发该异常。

自定义异常

自定义异常是程序员根据自己的需要定义的异常,它可以帮助程序员更好地管理程序中的异常情况。

定义自定义异常的语法如下:

class MyException : Exception
{
    public MyException(string message) : base(message)
    {}
}

可以通过继承Exception类来定义自己的异常类,也可以通过构造函数和属性来扩展Exception类的功能。

异常的捕获和处理

C#中可以使用try-catch语句来捕获和处理异常。try语句块包含可能引发异常的代码,catch语句块处理异常。一个catch块可以捕获一个或多个异常,语法如下:

try
{
    // 可能引发异常的代码
}
catch (ExceptionType1 e)
{
    // 处理 ExceptionType1 类型的异常
}
catch (ExceptionType2 e)
{
    // 处理 ExceptionType2 类型的异常
}

在上面的代码中,如果try块的代码引发了ExceptionType1类型的异常,那么第一个catch块会被执行,如果引发了ExceptionType2类型的异常,那么第二个catch块会被执行。

下面是一个通过try-catch语句来处理除零异常的示例代码:

using System;

class Program
{
    public static void Main()
    {
        int dividend = 20;
        int divisor = 0;
        int result = 0;

        try
        {
            result = dividend / divisor;
        }
        catch (DivideByZeroException ex)
        {
            Console.WriteLine("不能除以0。错误信息:{0}", ex.Message);
        }

        Console.WriteLine("结果是:{0}", result);
    }
}

在上面的代码中,试图将20除以0,会引发DivideByZeroException异常,程序会捕获该异常并输出错误信息“不能除以0。”

自定义异常示例

下面是一个自定义异常的示例代码,该异常类用于检查温度是否在正常范围内:

using System;

class TemperatureOutOfRange : Exception
{
    public TemperatureOutOfRange(string message) : base(message)
    {}
}

class Program
{
    static void Main(string[] args)
    {
        try
        {
            CheckTemperature(150);
        }
        catch (TemperatureOutOfRange ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    static void CheckTemperature(int temperature)
    {
        if (temperature > 100 || temperature < 0)
        {
            throw new TemperatureOutOfRange("温度超出范围");
        }
        else
        {
            Console.WriteLine("温度正常");
        }
    }
}

在上面的代码中,当温度超出了0到100的范围时,程序抛出TemperatureOutOfRange异常,示例代码捕获异常并输出错误信息“温度超出范围”。

总结

本文介绍了C#异常处理的相关知识,包括什么是异常、异常的分类、异常的捕获和处理、如何自定义异常等内容。在实际开发中,合理处理异常可以提高程序的稳定性和可靠性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#异常处理总结及简单实例 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • ASP.Net Core中的内存和GC机制

    ASP.NET Core中的内存和GC机制 在本攻略中,我们将深入了解ASP.NET Core中的内存和GC机制。我们将介绍.NET Core内存管理的基本原理、GC机制的工作原理和使用方法,并提供两个示例说明。 .NET Core内存管理的基本原理 .NET Core内存管理的基本原理是将内存分为两个部分:托管堆和非托管堆。托管堆是由.NET运行时管理的内…

    C# 2023年5月16日
    00
  • C#实现Ruby的负数索引器

    让我来详细讲解如何使用 C# 实现 Ruby 的负数索引器。 什么是 Ruby 的负数索引器 在 Ruby 中,我们可以使用负数索引器来从结尾开始访问数组元素。例如,一个包含 4 个元素的数组 arr,它们的索引分别为 0、1、2、3。如果我们想要访问最后一个元素,我们可以使用索引 -1,即 arr[-1]。类似的,如果我们想要访问倒数第二个元素,我们可以使…

    C# 2023年6月8日
    00
  • .NET6打包部署到Windows Service的全过程

    以下是.NET 6打包部署到Windows Service的全过程攻略: 1. 什么是Windows Service Windows Service是一种在后台运行的应用程序,它可以在Windows操作系统启动时动启动,并在系统运行时一直运行。Windows Service通常用于执行后台任务,例如监视文件夹、处理消息队列等。 2. 什么是.NET 6 .N…

    C# 2023年5月12日
    00
  • C#封装的Sqlite访问类实例

    下面是详细讲解“C#封装的Sqlite访问类实例”的完整攻略。 一、Sqlite简介 Sqlite是一个轻量级的关系型数据库管理系统,它的特点是轻巧、可嵌入、可移植和高效,在单机或低并发情况下是一个非常好的选择。在C#中,我们可以使用System.Data.Sqlite命名空间提供的Sqlite连接器来访问Sqlite数据库。 二、C#封装的Sqlite访问…

    C# 2023年5月31日
    00
  • C#实现飞行棋源码

    下面我将详细讲解“C#实现飞行棋源码”的完整攻略。 1. 确定需求 首先需要了解飞行棋游戏的规则,确定具体需求。例如,游戏玩家人数、游戏板的大小、玩家与机器的互动方式等等。 2. 构建游戏界面 可以使用Windows Forms或WPF来构建游戏界面。主要需要设计游戏棋盘,玩家信息栏,游戏控制按钮等。 3. 实现游戏逻辑 游戏逻辑是整个游戏的灵魂。游戏逻辑主…

    C# 2023年6月7日
    00
  • C#实现六大设计原则之迪米特法则

    C#实现六大设计原则之迪米特法则 什么是迪米特法则 迪米特法则,也被称为最少知识原则(Least Knowledge Principle),是面向对象编程中的一个重要原则。 迪米特法则的定义为:只与你直接的朋友通信,不跟陌生人说话。 简而言之,就是一个对象应该对其他对象有尽可能少的了解。 也就是说,当我们设计一个系统时,每个对象都应该尽量减少和其他对象之间的…

    C# 2023年6月7日
    00
  • 基于C#实现网络爬虫 C#抓取网页Html源码

    下面是“基于C#实现网络爬虫 C#抓取网页Html源码”的完整攻略: 一、网络爬虫简介 网络爬虫,也称为网络蜘蛛、网络机器人等,是一种自动化的程序,用于在互联网上通过各种方式获取信息。 二、C#抓取网页Html源码 1. 使用C#自带的WebClient类 C#自带的WebClient类可以轻松地访问网页,并将其HTML源码下载到本地。下面是一个示例代码: …

    C# 2023年6月6日
    00
  • C# Directory.GetDirectories – 获取目录下的所有子目录

    Directory.GetDirectories 方法的作用是获取指定目录中的所有子目录的名称。 使用方法: string[] directories = Directory.GetDirectories(path); 其中 path 参数为要获取子目录的目录路径。返回值 directories 为一个字符串数组,包含指定目录中所有的子目录名称。 该方法还有…

    C# 2023年4月19日
    00
合作推广
合作推广
分享本页
返回顶部