第二十九式:C# 异常处理 (走火入魔)

绝世
秘籍
人在江湖飘,哪能不挨刀?练功也会有意外,比如真气逆行(除以零),或者经脉寸断(文件找不到)。
这在代码里叫异常 (Exception)。如果处理不好,程序就会直接崩溃(暴毙)。
那怎么办?难道要废去武功重练?
非也!只要学会异常处理 (try-catch),就能在走火入魔的瞬间护住心脉,把内力导回正轨。

1. try-catch - 护体神功

把可能出危险的代码包在 try 里。如果出了事,catch 会接住它。


try
{
    int a = 10;
    int b = 0;
    int c = a / b; // 危险!除以零!
    Console.WriteLine("结果是:" + c);
}
catch (DivideByZeroException ex) // 专门接“除以零”的招
{
    Console.WriteLine("哎呀!不能除以零!");
    Console.WriteLine("错误详情:" + ex.Message);
}
catch (Exception ex) // 接住所有其他类型的招(万能盾牌)
{
    Console.WriteLine("发生了未知的错误!");
}
        

2. finally - 善后工作

不管有没有出事,最后都要做的事情(比如收剑回鞘、关闭文件)。


try
{
    // 打开藏宝箱...
}
catch
{
    // 遇到机关...
}
finally
{
    // 无论有没有拿到宝藏,都要把箱子盖上!
    Console.WriteLine("清理现场...");
}
        
别滥用 try-catch
如果你把整个程序都包在一个巨大的 try 里,那就是在掩耳盗铃。
只有在你无法预测或者无法控制的地方(比如读文件、连网络)才用它。
🚑

动手时刻:神医

编写一个程序,让用户输入一个数字。如果用户输入的不是数字(比如输入了 "abc"),程序不要崩溃,而是温柔地提示“请输入正确的数字”。

查看参考答案

try
{
    Console.Write("请输入年龄:");
    string input = Console.ReadLine();
    int age = int.Parse(input); // 这里可能炸
    Console.WriteLine("你的年龄是:" + age);
}
catch (FormatException)
{
    Console.WriteLine("大侠,请输入数字,别输入乱码!");
}
                    

成就解锁:【神医平一指】 获得:救心丸