catch块版本C#6和旧版本

时间:2016-01-26 17:30:09

标签: c# try-catch c#-6.0 catch-block

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

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

2 个答案:

答案 0 :(得分:5)

  

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

e在catch的主体中将是Exception类型,而不是派生类型。

  

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

然后使用它。

此处when关键字的重点在于它允许您编写任意布尔表达式以确定您是否匹配,而不是能够基于此过滤表达式表达式是否为给定的派生类型。

答案 1 :(得分:2)

在您的示例中,除了在catch中输入e之外别无其他。

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

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

Code Source