CSharp-Learning/lessons/Lesson08/Program.cs
Rosmontis_Cloud f604d53191 Initial commit: C# 学习笔记和示例代码
- Lesson 01-10: C# 基础语法
- WebView2: 集成示例
- notes/: 详细笔记
2026-07-01 16:31:35 +08:00

188 lines
5.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}