当我们在编写 C# 程序时,难免会发生错误。这时候,我们需要使用异常处理,来提示程序出现错误。本文将介绍如何学会使用 C# 异常,包括如何定义和处理异常。
异常介绍
异常可以是程序运行过程中的错误、意外情况以及未处理的情况。在 C# 中,异常类继承自 System.Exception 类,程序在发生异常时会自动生成一个异常对象。
异常的分类
C# 中的异常可以分为两种:应用程序异常和系统异常。
应用程序异常
应用程序异常是由应用程序自身引发的,例如输入错误数据、逻辑错误等。
常见的应用程序异常有:
- ArgumentException:参数错误异常;
- ArgumentNullException:空参数异常;
- ArgumentOutOfRangeException:参数超出范围异常;
- FileNotFoundException:文件未找到异常;
- NotSupportedException:不支持的操作异常;
- InvalidOperationException:无效操作异常。
系统异常
系统异常是由 .NET Framework 引发的异常,例如空引用、越界等,程序员无法通过代码预测并捕获的异常。
常见的系统异常有:
- NullReferenceException:空引用异常;
- IndexOutOfRangeException:下标越界异常;
- DivideByZeroException:除以零异常。
异常的处理
当异常被触发时,可以通过 try-catch 语句处理异常。代码块中的语句在 try 中执行,如果抛出异常,则转到 catch 块中执行:
try
{
// 代码块
}
catch (Exception ex)
{
// 异常处理:ex为捕获到的异常对象
}
在 catch 块中,可以具体处理异常。如果只需要提示异常信息,通常使用 Console.WriteLine(ex.Message)
或者 MessageBox 显示异常信息。
也可以使用 finally 语句块,在 try 或 catch 内出现异常时执行该语句块中的语句,其代码如下:
try
{
// 代码块
}
catch (Exception ex)
{
// 异常处理:ex为捕获到的异常对象
}
finally
{
// 不管是否发生异常,都会执行 finally 代码块
}
示例1:应用程序异常
下面是一个演示如何处理应用程序异常的示例:
using System;
class Program
{
static void Main()
{
try
{
int num1 = 10;
int num2 = 0;
int result = num1 / num2;
Console.WriteLine(result);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("异常类型:" + ex.GetType().Name);
Console.WriteLine("错误信息:" + ex.Message);
}
Console.ReadLine();
}
}
上述代码在执行 num1 / num2
时会抛出 DividebyZeroException
异常,catch
语句块中捕获这个异常,输出异常信息。 此时程序会输出以下结果:
异常类型:DivideByZeroException
错误信息: Attempted to divide by zero.
示例2:系统异常
下面是一个演示如何处理系统异常的示例:
using System;
class Program
{
static void Main()
{
try
{
int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers[3]);
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("异常类型:" + ex.GetType().Name);
Console.WriteLine("错误信息:" + ex.Message);
}
Console.ReadLine();
}
}
上述代码中访问了一个数组的超出范围的元素,触发了 IndexOutOfRangeException
异常,catch
语句块中捕获这个异常,输出异常信息。 此时程序会输出以下结果:
异常类型:IndexOutOfRangeException
错误信息: Index was outside the bounds of the array.
总结
本文简单介绍了 C# 异常的相关知识,包括异常分类、异常处理及异常示例。希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:学会使用C#异常 - Python技术站