C# 6.0 (C# vNext) 新功能之:Exception-Handling Improvements
在 C# 6.0 新功能裹的異常處理,有兩個改進:
異步處理(async and await)可以在 catch block 裹使用了。在 C# 5.0 推出的 async and await,當時不可以用於 catch block,現在已經可以了。支持異常過濾 exception filtering
異步處理的例子:
try
{
WebRequest webRequest = WebRequest.Create("http://www.csdn.net");
WebResponse response = await webRequest.GetResponseAsync();
// ...
}
catch (WebException exception)
{
await WriteErrorToLog(exception);
}
異常過濾,這算是讓 C# 跟上 Visual Basic .NET 和 F# 在這方面的支持。
如下例子:
try
{
DoSomeHttpRequest();
}
catch (System.Web.HttpException e) if (e.GetHttpCode() == 400)
{
WriteLine("Not Found");
}
catch (System.Web.HttpException e) if (e.GetHttpCode() == 500)
{
WriteLine("Internal Server Error");
}
catch
{
WriteLine("Generic Error");
}
比較一下之前的寫法:
try
{
DoSomeHttpRequest();
}
catch (System.Web.HttpException e)
{
switch (e.GetHttpCode())
{
case 400:
WriteLine("Bad Request");
case 500:
WriteLine("Internal Server Error");
default:
WriteLine("Generic Error");
}
}