在 .NET Framework 4.8 中,try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃。而 .NET Core 3.0 中不会出现这样的问题。
本文可能是正在像微软报告的一个 Bug。
本文由多种语言编写而成,请选择你喜欢的语言:
- .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃 - walterlv
- App will crash when using the when keyword in a catch expression - walterlv
官方文档中 when 的行为
你可以前往官方文档:
在其中,你可以找到这样一段话:
用户筛选的子句的表达式不受任何限制。 如果在执行用户筛选的表达式期间发生异常,则将放弃该异常,并视筛选表达式的值为 false。 在这种情况下,公共语言运行时继续搜索当前异常的处理程序。
即当 when
块中出现异常时,when
表达式将视为值为 false
,并且此异常将被忽略。
示例程序
鉴于官方文档中的描述,我们可以编写一些示例程序来验证这样的行为。
using System;
using System.IO;
namespace Walterlv.Demo.CatchWhenCrash