捕获块版本 C#6 和旧版本不同

本文关键字:版本 C#6 | 更新日期: 2023-09-27 18:31:54

在 C# 6 中,您可以编写以下代码:

try  { }
catch (Exception e) when (e is NullReferenceException) { }
catch (Exception e) when (e is UnauthorizedAccessException) { }

但是上面的代码和下面的旧 C# 代码有什么区别呢?

try  { }
catch (NullReferenceExceptione e) { }
catch (UnauthorizedAccessExceptione e) { }

对我来说,旧版本看起来最短,最好使用。

捕获块版本 C#6 和旧版本不同

但是上面的代码和下面的旧 C# 代码有什么区别呢?

e在捕获的主体中属于 Exception 类型,而不是派生类型。

对我来说,旧版本看起来最短,最好使用。

然后使用它。


这里 when 关键字的全部意义在于,它允许您编写任意布尔表达式来确定您是否具有匹配项,而不是根据表达式是否为给定派生类型来过滤表达式。

在您的示例中,除了在捕获中键入e之外,没有太多其他内容。

该关键字更适合用于琐碎的真/假检查,例如:

try 
{
  // Do stuff
} 
catch (Exception e) when (
  (DateTime.Now.DayOfWeek == DayOfWeek.Saturday)
  || (DateTime.Now.DayOfWeek == DayOfWeek.Sunday)) {
  // Swallow
}

(代码来源)