有誰能告訴我throw
和throw ex
之間的區別嗎? 我讀throw
存儲以前的例外,沒有得到這條線。
我可以通過例子簡要介紹一下嗎?拋出和拋出前的區別c#.net
回答
是 - throw
重新拋出被捕獲的異常,並保留堆棧跟蹤。 throw ex
會拋出相同的異常,但會將堆棧跟蹤重置爲該方法。
除非你想向重置堆棧跟蹤(即屏蔽從庫的內部運作的公共用戶),throw
是一般更好的選擇,因爲你可以看到異常源自哪裏。
我還要提到的是, 「直通」 catch塊:
try
{
// do stuff
}
catch(Exception ex)
{
throw;
}
是毫無意義的。這完全相同的行爲,就好像根本沒有try/catch
一樣。
如果在拋出之前放置了一條日誌語句,這並非毫無意義。多數民衆贊成我經常使用它。 – Evgeni
@Eugene你是對的,但我沒有任何東西在扔 - 這正是我想說明的。 –
投擲會重新拋出原始異常;
throw ex會創建一個新的異常,所以堆棧跟蹤發生變化。通常意義不大,一般您應該只是扔,或創建一個新的異常,並拋出,如
// not a great code, demo purposes only
try{
File.Read("blah");
}
catch(FileNotFoundException ex){
throw new ConfigFileNotFoundException("Oops", ex);
}
我不止一次使用過這種模式,「拋出新的異常......」,通常只有當我通過現有代碼繪製到角落時纔會這樣。如果我有時間/訪問權限/更改*上游*代碼的權限,我會嘗試重構,不需要這個。但是,我偶爾也會在綠地代碼中使用這種模式。 –
- 1. Java中的拋出和拋出的區別澄清
- 2. 拋出和拋出arg捕獲異常有什麼區別?
- 3. Net :: HTTP.post_form拋出EOFError?
- 4. C#:'拋出'退出當前函數嗎?
- 5. 拋出拋出的錯誤
- 6. 異常處理:拋出,拋出和拋出
- 7. C#.Net SaxonApi拋出內存異常
- 8. 拋出異常不拋出
- 9. 上次拋出的異常包含以前拋出的異常?
- 10. C#Assembly.LoadFrom拋出BadImageFormatException
- 11. C++異常拋出
- 12. C#拋出異常
- 13. FileStream拋出UnauthorisedAccessException - C#
- 14. C#拋出異常
- 15. 集拋出StackOverflowException C#
- 16. C++拋出錯誤
- 17. C++ RegEnumValue拋出ERROR_MORE_DATA
- 18. Java - 拋出異常和捕獲和重新拋出異常之間的區別例外
- 19. Laravel 5.1 - 拋出異常和中止之間的區別()
- 20. 「拋出新異常」和「新異常」之間的區別?
- 21. Swift中的拋出和反饋有什麼區別?
- 22. 調用sys.exit()和拋出異常之間的區別
- 23. 列AS別名拋出'System.IndexOutOfRangeException'
- 24. 雷音別名拋出
- 25. 方法簽名中的拋出和Java中的拋出語句之間的區別
- 26. RestEasy的客戶端拋出拋出java.lang.ClassNotFoundException:com.sun.ws.rs.ext.RuntimeDelegateImpl
- 27. 拋出的替代代碼拋出IOException
- 28. C++/C#異常拋出
- 29. Hibernate和拋出:IllegalArgumentException
- 30. 拋出異常的C#
http://stackoverflow.com/questions/730250/is-there-a-difference-between拋出拋出ex – Random
拋出拋出拋出拋出異常導致拋出拋出異常。 – Jodrell