📅  最后修改于: 2023-12-03 15:14:28.336000             🧑  作者: Mango
在编程的过程中,我们难免会遇到错误或异常情况,这时我们需要对它们进行处理。C# 中的异常处理机制提供了一个标准的方法来处理这些情况,程序员可以利用这个机制确保程序能够正常运行。
C# 的异常处理可以分为三大类:
StackOverflowException
或 OutOfMemoryException
。Exception
或其子类。在 C# 中,异常处理的基本结构为 try-catch
语句块,结构如下:
try
{
// 可能会抛出异常的代码块
}
catch (ExceptionType1 ex)
{
// 处理 ExceptionType1 类型的异常
}
catch (ExceptionType2 ex)
{
// 处理 ExceptionType2 类型的异常
}
finally
{
// 可选的 finally 代码块,无论是否发生异常都会执行
}
例如:
try
{
// 可能会抛出异常的代码块
}
catch (DivideByZeroException ex)
{
// 处理除以零异常
}
catch (Exception ex)
{
// 处理其他异常
}
finally
{
// 可选的 finally 代码块,无论是否发生异常都会执行
}
当程序执行到 try
块时,会依次执行其中的语句,当程序执行出现错误或异常时,就会跳转到 catch
块。catch
块则会依照代码顺序依次匹配异常类型,匹配成功后执行相应的处理代码,如果没有匹配到对应类型的异常,则会将该异常向上抛出,由上层调用者处理。
当所有的 catch
块执行完毕后,会继续执行 finally
块中的代码。finally
代码块是可选的,不管是否发生了异常,finally
代码块中的代码都会被执行。
在 C# 中,通过 throw
关键字可以抛出一个异常对象。例如:
if (age < 0)
{
throw new ArgumentException("年龄不能小于零");
}
程序员也可以自定义异常类型,例如:
class MyException : Exception
{
public MyException(string message) : base(message)
{
}
}
然后可以使用以下方式来抛出自定义异常:
throw new MyException("这是自定义异常");
在异步方法中,应该在返回值类型前加 Task
或 Task<TResult>
。在异步操作中出现异常时,异常将会捆绑到 Task
对象中,调用者可以通过 Task.Exception
属性获取异常信息。
例如:
async Task<bool> DoAsync()
{
try
{
// 异步操作
return true;
}
catch(Exception ex)
{
// 处理异常或重新抛出异常
throw;
}
}
在 C# 中,异常处理是处理程序中可能出现的问题的标准方法。使用 try-catch
语句,程序员可以处理系统错误、自定义异常和应用异常。在处理异步方法时,需在返回值类型前加 Task
或 Task<TResult>
,并在 catch
块中将异常重新抛出以便调用者可以获取异常信息。