using System; namespace Lesson08 { class Program { static void Main(string[] args) { Console.WriteLine("=== 异常处理演示 ===\n"); // ========== 基本 try-catch ========== Console.WriteLine("--- 基本 try-catch ---"); try { int[] numbers = { 1, 2, 3 }; Console.WriteLine(numbers[10]); } catch (Exception ex) { Console.WriteLine($"捕获异常: {ex.Message}"); } // ========== 捕获特定异常 ========== Console.WriteLine("\n--- 捕获特定异常 ---"); string[] inputs = { "123", "abc", "9999999999999" }; foreach (string input in inputs) { try { int num = int.Parse(input); Console.WriteLine($"转换成功: {num}"); } catch (FormatException) { Console.WriteLine($"\"{input}\" 格式错误,不是数字"); } catch (OverflowException) { Console.WriteLine($"\"{input}\" 数字太大"); } } // ========== throw 抛出异常 ========== Console.WriteLine("\n--- throw 抛出异常 ---"); try { SetAge(-5); } catch (ArgumentException ex) { Console.WriteLine($"捕获到: {ex.Message}"); } try { SetAge(200); } catch (ArgumentException ex) { Console.WriteLine($"捕获到: {ex.Message}"); } SetAge(25); // 正常 SetAge(0); // 正常 // ========== 实际项目场景 ========== Console.WriteLine("\n--- 设备连接场景 ---"); MicrophoneDevice mic = new MicrophoneDevice("USB麦克风"); // 场景1:设备未连接 try { mic.StartListening(); } catch (DeviceNotConnectedException ex) { Console.WriteLine($"错误: {ex.Message}"); Console.WriteLine("建议:请检查设备连接"); } // 场景2:连接后正常操作 mic.Connect(); try { mic.StartListening(); Console.WriteLine("麦克风开始监听..."); mic.StopListening(); Console.WriteLine("麦克风停止监听..."); } catch (DeviceNotConnectedException ex) { Console.WriteLine($"错误: {ex.Message}"); } finally { mic.Disconnect(); Console.WriteLine("设备已断开"); } // ========== finally 演示 ========== Console.WriteLine("\n--- finally 执行时机 ---"); try { Console.WriteLine("try 块执行"); // int x = 1 / 0; // 解开这行会跳到 catch } catch { Console.WriteLine("catch 块执行"); } finally { Console.WriteLine("finally 块总是执行"); } Console.WriteLine("\n=== 演示完成 ==="); Console.ReadLine(); } // ========== throw 示例 ========== static void SetAge(int age) { if (age < 0 || age > 150) { throw new ArgumentException($"年龄必须在 0-150 之间,当前: {age}"); } Console.WriteLine($"年龄设置为: {age}"); } } // ========== 自定义异常 ========== class DeviceNotConnectedException : Exception { public DeviceNotConnectedException(string message) : base(message) { } public DeviceNotConnectedException(string message, Exception inner) : base(message, inner) { } } // ========== 设备类 ========== class MicrophoneDevice { private string name; private bool isConnected; private bool isListening; public MicrophoneDevice(string name) { this.name = name; this.isConnected = false; this.isListening = false; } public void Connect() { isConnected = true; Console.WriteLine($"[{name}] 设备已连接"); } public void Disconnect() { isConnected = false; Console.WriteLine($"[{name}] 设备已断开"); } public void StartListening() { if (!isConnected) { throw new DeviceNotConnectedException($"{name} 未连接,无法开始监听"); } if (isListening) { throw new InvalidOperationException($"{name} 已经在监听中"); } isListening = true; } public void StopListening() { if (!isListening) { throw new InvalidOperationException($"{name} 没有在监听"); } isListening = false; } } }