0

在 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) { }

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

4

2 回答 2

5

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

e将是Exceptioncatch 主体中的类型,而不是派生类型。

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

然后使用它。


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

于 2016-01-26T17:32:59.653 回答
2

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

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

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

代码源

于 2016-01-26T17:35:23.640 回答