我總是聽到那些說過二傳手和吸氣者應該很快的人,並且not throw exceptions。如何處理setter中的無效值?
現在,如果它是真的,我應該如何處理傳遞給setter的無效值,如果不拋出異常?
我總是聽到那些說過二傳手和吸氣者應該很快的人,並且not throw exceptions。如何處理setter中的無效值?
現在,如果它是真的,我應該如何處理傳遞給setter的無效值,如果不拋出異常?
其實,我認爲這主要是對構造函數來說不是拋出異常。
對於getters/setters來說,問題是綁定(如WPF)可能會在getter/setter中引發一些拋出異常的問題。
但是通常情況下,除了開發過程中的問題(預先使用的對象爲空?)之外,沒有太多可以導致異常的東西。
驗證問題不應該是例外。例外情況應該是非常特殊的情況(如預期的文件不存在,內存不足)。輸入驗證和檢查用戶輸入的文件是否存在不應該是例外情況。
按MSDN
避免財產的getter拋出異常。
屬性獲取者應該是簡單的操作,並且不應該有任何 先決條件。如果一個getter可以拋出一個異常,那麼它可能被重新設計爲一個方法。請注意,此規則不適用於 索引器,我們確實希望通過驗證 參數來預期異常。
話雖如此,對我來說,這是絕對罰款從setter
拋出異常,通常getters
應該不會拋出異常。
將屬性視爲屬性或對象的特徵。所以,當你正在考慮這個屬性的價值時,你應該得到的是沒有任何例外。你也想這樣,沒有人應該能夠設置無效值,所以在設置值時拋出異常是很好的。
同樣作爲一種良好的做法,如果屬性設置器拋出異常,則會保留以前的值。以保持對象的完整性。 MSDN
您可以在這裏找到一些很好的討論 - https://softwareengineering.stackexchange.com/questions/16646/is-throwing-an-exception-from-a-property-bad-form
我假設你指出MSDN只是說在getter中避免它? –
@ BarryO'Kane - 是的,只適用於獲得者,更新我的答案以獲得更多細節。 – Yogi
「應該是快,而不是拋出異常」從來沒有聽說過。如果我想驗證setter,我總是使用異常。 – 2016-07-07 08:07:42
我認爲在setter中拋出異常沒有犯罪。 –
我投票結束這個問題作爲題外話,因爲它似乎基於一個錯誤的前提,沒有支持鏈接/文檔。 –