0Pricing
C# Academy · 课时

简单诊断:异常与保护性检查

对预期的无效输入应用保护性检查,对异常状态抛出异常,并使用 try/catch 优雅地处理错误。

简单诊断:异常与保护性检查 是 CoddyKit 上的免费 C# Academy 课时。 这是第 3 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 3 节课。

诊断概览

目标:对预期问题使用防护检查,对罕见且严重的问题使用异常。

防护检查示例

防护检查会针对常见的无效输入返回状态,而不是抛出异常。

using System;

public class Program
{
  public static bool TryDivide(int a, int b, out int result)
  {
    if (b == 0)
    {
      result = 0;
      return false; // guard check fails
    }
    result = a / b;
    return true;
  }

  public static void Main(string[] args)
  {
    int r;
    bool ok = TryDivide(10, 0, out r);
    Console.WriteLine("ok=" + ok + " result=" + r);
  }
}

异常示例

异常在未被处理时会停止执行。请将它们用于意外或严重的情况。

using System;

public class Program
{
  public static int PriceWithTax(int price, int ratePercent)
  {
    if (price < 0)
    {
      throw new ArgumentOutOfRangeException("price");
    }
    if (ratePercent < 0 || ratePercent > 100)
    {
      throw new ArgumentOutOfRangeException("ratePercent");
    }
    return price + (price * ratePercent / 100);
  }

  public static void Main(string[] args)
  {
    try
    {
      int total = PriceWithTax(100, 20);
      Console.WriteLine("Total=" + total);
    }
    catch (Exception ex)
    {
      Console.WriteLine("Error: " + ex.Message);
    }
  }
}

混合使用检查与异常

请混合使用这两种方式:对常规验证使用防护检查,对无效状态使用异常。

using System;

public class Program
{
  public static bool TryParsePrice(string text, out int value)
  {
    return int.TryParse(text, out value); // guard check
  }

  public static int GetDiscount(int code)
  {
    if (code < 0) throw new ArgumentException("Invalid code"); // exception
    return 10;
  }

  public static void Main(string[] args)
  {
    int v;
    if (TryParsePrice("123", out v))
    {
      Console.WriteLine("Parsed " + v);
    }

    try
    {
      int d = GetDiscount(-1);
      Console.WriteLine("Discount=" + d);
    }
    catch (Exception ex)
    {
      Console.WriteLine("Error: " + ex.Message);
    }
  }
}

尝试/捕获示例

请使用尝试/捕获来处理异常,使程序继续运行。

using System;

public class Program
{
  public static void Main(string[] args)
  {
    try
    {
      int x = 10;
      int y = 0;
      int z = x / y; // will throw DivideByZeroException
      Console.WriteLine(z);
    }
    catch (DivideByZeroException ex)
    {
      Console.WriteLine("Cannot divide by zero: " + ex.Message);
    }
  }
}

提示

提示:

  • 防护检查会针对常见情况返回安全的默认值。
  • 异常应该少见且具有明确意义。
  • 只捕获您能够处理的异常。

防护检查与异常

快速检查:什么时候应该优先使用防护检查,而不是抛出异常?

回顾

回顾:对常见的无效输入使用防护检查,对特殊状态抛出异常;如果可以恢复,请使用尝试/捕获进行处理。

常见问题解答

「简单诊断:异常与保护性检查」课时是免费的吗?

是的 — 「简单诊断:异常与保护性检查」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 3 节课。

「简单诊断:异常与保护性检查」这节课中我会学到什么?

对预期的无效输入应用保护性检查,对异常状态抛出异常,并使用 try/catch 优雅地处理错误。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C# Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 3 节。

「简单诊断:异常与保护性检查」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C# Academy 课中编写并运行代码吗?

能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. if/else、switch(经典形式)与循环:for、while、do、foreach
  2. break/continue;goto(避免使用);作用域;异常与保护性检查
  3. 简单诊断:异常与保护性检查
← 返回 C# Academy