<p>c# 中 when 关键字用于在 catch 块中添加条件,实现条件性异常捕获。1. 当异常类型匹配且 when 后的布尔条件为真时,catch 块才执行;2. 可基于异常属性(如 filename、message)或外部状态(如静态变量)进行判断;3. 支持通过 && 或 || 组合多个条件以实现复杂筛选;4. 条件评估发生在异常类型匹配后,性能影响通常较小,但应避免在条件中执行耗时操作;5. 相比传统 try-catch 和多 catch 块,when 提供更精细、简洁的异常过滤机制,提升代码可读性和维护性。该机制通过异常过滤器实现,使异常处理更灵活精准。</p>

C# 中
when
catch
catch
解决方案:
使用
when
try
{
// 可能抛出异常的代码
}
catch (SpecificExceptionType ex) when (condition)
{
// 当异常类型为 SpecificExceptionType 且 condition 为真时执行
// 处理异常的代码
}
catch (AnotherExceptionType ex)
{
// 处理 AnotherExceptionType 异常的代码
}
catch (Exception ex)
{
// 处理其他类型异常的代码
}condition
举个例子,假设你正在处理文件操作,并且希望仅当文件名包含特定字符串时才捕获
IOException
try
{
// 文件操作代码
string filePath = "important_data.txt";
if (!File.Exists(filePath))
{
throw new FileNotFoundException("文件未找到", filePath);
}
using (StreamReader reader = new StreamReader(filePath))
{
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
}
catch (FileNotFoundException ex) when (ex.FileName.Contains("important"))
{
Console.WriteLine($"重要文件未找到:{ex.FileName}");
// 特定于重要文件的处理逻辑
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"文件未找到:{ex.FileName}");
// 其他文件未找到的处理逻辑
}
catch (IOException ex)
{
Console.WriteLine($"IO 异常:{ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"发生异常:{ex.Message}");
}在这个例子中,第一个
catch
FileNotFoundException
FileName
catch
FileNotFoundException
使用
when
catch
if
when
private static bool _isCriticalError = false;
public static void SetCriticalError(bool value)
{
_isCriticalError = value;
}
public static void DoSomething()
{
try
{
// 一些代码
throw new Exception("发生了错误");
}
catch (Exception ex) when (_isCriticalError)
{
// 仅当 _isCriticalError 为 true 时才处理异常
Console.WriteLine("关键错误发生:" + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("其他错误发生:" + ex.Message);
}
}在这个例子中,只有当
_isCriticalError
true
catch
when
虽然不能直接在一个
catch
when
when
&&
||
例如:
try
{
// 一些代码
throw new ArgumentException("参数无效", "myParam");
}
catch (ArgumentException ex) when (ex.ParamName == "myParam" && ex.Message.Contains("无效"))
{
// 仅当 ParamName 为 "myParam" 且 Message 包含 "无效" 时才处理
Console.WriteLine("参数 'myParam' 无效:" + ex.Message);
}
catch (ArgumentException ex)
{
Console.WriteLine("参数异常:" + ex.Message);
}在这个例子中,只有当
ArgumentException
ParamName
Message
catch
when
when
catch
catch
when
when
如果
when
when
when
为了最大限度地减少
when
when
try
when
when
与其他异常处理方式相比,
when
传统的 try-catch
try-catch
when
多个 catch
catch
when
Exception filters
when
true
总的来说,
when
when
以上就是C#的when关键字在catch中怎么用?如何条件捕获异常?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号