在C#中,try-catch语句用于捕获和处理异常。当在try块中发生异常时,程序将跳转到相应的catch块,以执行相应的异常处理逻辑。
基本语法
try
{
// 可能会引发异常的代码块
}
catch (ExceptionType1 ex)
{
// 处理ExceptionType1类型的异常
}
catch (ExceptionType2 ex)
{
// 处理ExceptionType2类型的异常
}
catch (Exception ex)
{
// 处理其他类型的异常
}
finally
{
// 可选的finally块,无论是否发生异常都会执行
}
在try块中,可以编写可能会引发异常的代码。
如果在try块中发生了异常,程序将查找匹配的catch块来处理异常。如果没有找到匹配的catch块,则程序将终止。
catch块用于处理特定类型的异常。
可以根据需要指定多个catch块来处理不同类型的异常。在catch块中,可以编写处理异常的逻辑,如记录错误信息、回滚事务等。
finally块是可选的,无论是否发生异常,其中的代码都会执行。
通常,你可以在finally块中编写清理代码,如关闭文件、释放资源等。
完整代码示例1:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TryCatch1
{
internal class Program
{
static void Main(string[] args)
{
try
{
int result = 10 / 0; // 引发除以零的异常
}
catch (DivideByZeroException ex)
{
Console.WriteLine("发生了除以零的异常: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("发生了其他异常: " + ex.Message);
}
finally
{
Console.WriteLine("清理代码执行了。");
}
}
}
}
在上面的示例中,try块中的代码引发了除以零的异常。
程序将跳转到匹配的catch块,打印错误消息。
最后,finally块中的代码将执行,打印"清理代码执行了。"。
完整示例代码2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TryCatch2
{
internal class Program
{
static void Main(string[] args)
{
try
{
// 可能会引发异常的代码块
int result = 10 / 0; // 引发除以零的异常
}
catch (DivideByZeroException ex) // 捕获除以零的异常
{
Console.WriteLine("发生了除以零的异常: " + ex.Message);
}
catch (NullReferenceException ex) // 捕获空引用异常
{
Console.WriteLine("发生了空引用异常: " + ex.Message);
}
catch (Exception ex) // 捕获其他类型的异常
{
Console.WriteLine("发生了其他异常: " + ex.Message);
}
finally
{
// 可选的finally块,无论是否发生异常都会执行
Console.WriteLine("清理代码执行了。");
}
}
}
}
看到有疑问说 try... catch语句属于流程控制么?
在C#中,try-catch语句属于流程控制的一种。这是因为它允许改变或中断正常的程序执行流程,以便处理可能发生的错误或异常。
当使用try-catch语句时,实际上是在告诉编译器:“尝试执行这段代码,如果发生任何异常,则跳转到相应的catch块处理”。这是一种控制程序执行流程的方式,因为你在决定哪些错误应被捕获并如何处理它们。