到another question這是問關於這個話題,如果你想趕上例外,你必須有處理程序中的最後throw
爲了防止警告出現類似。
從MSDN documentation此警告:
要修復與該規則的衝突,趕上一個更具體的例外,或 重新拋出的一般例外,因爲在catch 塊中的最後一條語句。
這就是說,這不會真的有助於你的情況,因爲你想「吞下」異常,而不是重新拋出它。看看這六個特定例外情況的列表,我無法想象,花時間(認真如5分鐘)來處理mostrecommendedway中的每一個都是可能的。並不是經常發生這種情況,WebRequest只是其中一種罕見的情況。
如果您的應用程序將具有重要的生命週期,那麼隨着時間的推移,您將發現自己正在爲這些例外中的每一個實現處理程序。沒有人喜歡「發生一般錯誤405」錯誤消息。這可能不是KISS,但是基礎就緒可以避免捕獲所有異常(如OutOfMemoryException
),並且還可以防止FxCop警告(並且會從挑剔的開發人員中剔除)。
如果您在您的應用程序中生成大量的WebRequests,可能需要一個助手類,如下所示,它會引發一個單獨的WebFetcherException
,並且還會提供更多有用的錯誤消息。下面是一個例子:
public static class WebFetcher
{
public WebResponse FetchFromUrl(Uri uri)
{
try
{
var request = WebRequest.Create(new Uri("MyUrl")) as HttpWebRequest;
return request.GetResponse();
}
catch (NotSupportedException ex)
{
//you could customize the error messages to be more suitable for your
//application, or leaving room for future error handling
throw new WebFetcherException(ex.Message, ex);
}
catch (ArgumentNullException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
catch (SecurityException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
catch (ProtocolViolationException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
catch (WebException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
catch (InvalidOperationException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
}
public class WebFetcherException : Exception
{
public WebFetcherException(string message, Exception inner)
: base(message, inner)
{ }
}
}
「現在我真的不在乎因爲什麼原因我會得到什麼類型的異常。」這些原因是什麼?抓住'Exception'幾乎總是做錯事情(記住,異常處理程序也運行於你不期望的異常 - 'OutOfMemoryException','ThreadAbortException',類似的事情),所以也許如果你能解釋爲什麼你抓住它,有一個更好的選擇。 – hvd 2012-04-11 21:13:58