在 C# 中,异常是指在程序执行期间发生的意外或异常情况,它会中断正常的程序流程。异常处理是 C# 提供的一种机制,用于优雅地处理这些运行时错误,而不是让程序崩溃。
C# 使用 try-catch-finally
块来处理异常:
try
{
// 可能抛出异常的代码
}
catch (SpecificException ex)
{
// 处理特定类型的异常
}
catch (Exception ex)
{
// 处理所有其他异常
}
finally
{
// 无论是否发生异常都会执行的代码
}
C# 中的异常都继承自 System.Exception
类,主要分为两类:
NullReferenceException
- 尝试访问 null 对象的成员IndexOutOfRangeException
- 数组索引越界DivideByZeroException
- 除以零InvalidCastException
- 无效的类型转换ArgumentException
- 无效的参数错误示例:
try
{
// 代码
}
catch (Exception ex)
{
// 空catch块或仅记录日志
}
解决方案:
错误示例:
try
{
// 代码
}
catch (Exception ex) // 捕获所有异常
{
// 处理
}
解决方案:
错误示例:
try
{
// 代码1
try
{
// 代码2
}
catch (Exception ex)
{
// 处理但不重新抛出
}
}
catch (Exception ex)
{
// 外层catch无法捕获内层已处理的异常
}
解决方案:
throw
重新抛出异常public class InsufficientFundsException : Exception
{
public decimal CurrentBalance { get; }
public decimal RequiredAmount { get; }
public InsufficientFundsException(decimal currentBalance, decimal requiredAmount)
: base($"Insufficient funds. Current balance: {currentBalance}, required: {requiredAmount}")
{
CurrentBalance = currentBalance;
RequiredAmount = requiredAmount;
}
}
// 使用
try
{
if (balance < amount)
{
throw new InsufficientFundsException(balance, amount);
}
}
catch (InsufficientFundsException ex)
{
Console.WriteLine(ex.Message);
// 处理资金不足的情况
}
通过合理使用异常处理机制,可以显著提高 C# 应用程序的可靠性和用户体验。