2011-06-03 19 views
5

我正在獲取RSS源,像這樣:捕捉異常,驗證輸入或兩者?

SyndicationFeed rss = SyndicationFeed.Load(XmlReader.Create(textBox1.Text)); 

XmlReader.Create()在這種情況下,可以扔了4點相關的東西的異常,如參數爲空,404錯誤等

我應該嘗試驗證Uri(確保它不是null,404,正確的文檔類型等),然後再調用該行或者我應該只處理異常?我知道我已經閱讀過無數次,因爲異常應該用於真正的特殊情況,我同意這看起來不符合這個先決條件,但處理異常似乎更容易。

回答

4

複選框的Text屬性不會爲空,因此您可以跳過該選項。手動檢查所有簡單且與流程無關的情況,例如字符串爲空和Url正確,並在Create方法中將更多不明確的XML特定內容留給驗證。所以答案是將兩者結合起來。

此外,讓我再次提及Eric Lippert的blog post關於例外。在你的情況下,可能會發生令人煩惱和外生的異常,所以你應該抓住它們。但要確保不會發生骨頭問題。

0

由於閱讀器和聚合提要解釋器將驗證輸入,所以實際上不需要重複該努力。這一點尤其真實,因爲 - 正確地做 - 你必須接受或拒絕完全相同的文件。這將是一個瘋狂的代碼重複。

我建議只處理例外。

0

我期待着看到其他人在這裏說的話,但在我看來,你應該做你認爲可以準確做到的驗證類型:檢查空URI,檢查一個完全空的URI,等等。除此之外,讓Create調用來處理驗證,並捕獲異常。我猜測那個函數的編寫者知道如何比你更徹底地驗證它(沒有任何意圖!)。

0

雖然我不是一個最佳實踐的上師,但我確實認爲例外應該是例外(是的......)這不僅是一個哲學事物,它也是一個實際的事情。在大多數情況下,異常處理的性能成本高於檢查異常原因。

如果我想成爲哲學家,我會說:「如果對這個問題沒有什麼可以做的,不要嘗試去處理它。」例如,如果要在文件中寫入內容,檢查文件是否存在,文件權限等可能會很麻煩,並且如果您無法訪問網絡驅動器,則無法做太多的工作。如果您發現異常情況說「驗證文件是否存在並且您擁有適當的權限」,則可以節省很多麻煩。