![](/img/trans.png)
[英]What is the difference between ArgumentException and just Exception?
[英]What is the difference between an error and an exception in .NET?
你能否向我解釋一下錯誤和異常之間的區別?
異常是從System.Exception
類派生的類型的對象。 它在throw
語句中用於將控制轉移到調用堆棧中某個地方的try
塊中的catch
子句。
錯誤只是您要解釋的一些代碼或消息。 錯誤代碼的問題是您可以決定忽略它們:
MethodThatReturnsAnError();
SomeCodeThatShouldNotExecuteOnError();
如果返回一個錯誤代碼,該調用將簡單地忽略錯誤代碼。 然而:
MethodThatThrowsAnException();
SomeCodeThatShouldNotExecuteOnError();
這是不可忽視的,並且會通過“ SomeCodeThatShouldNotExecuteOnError();
”將控制權轉移到堆棧。
異常是一個利用語言語義的類。 正如其他人所說,異常會中斷執行堆棧直到被捕獲。 可以使用異常來傳達錯誤,但更常見的是用於表示已發生異常的事件。
另一方面,錯誤可能是例外與否。
有幾種錯誤:
實際上,異常應限於處理運行時錯誤,因為輸入錯誤數據的用戶不是“例外”。 要處理用戶錯誤,您應采取以下方法:
應將異常用作用戶錯誤的“最后一道防線”。 如果您正在編寫持久層,則可以依賴異常來確保通過驗證而丟失的錯誤數據不會持久存在。 但是,您應該通過在驗證中添加一個修復程序來解決這些錯誤,從而防止錯誤首先發生。
通常,我將它們歸類為:
錯誤 - 是應用程序中的已知工作流程。 例如:身份驗證期間未提供的用戶名是錯誤。
應用程序可以處理這些情況,並且能夠向用戶顯示友好消息,以提示正確輸入和/或處理不同的數據。
異常 - 通常在離開系統時拋出和/或應用程序中發生意外情況。 例如:由於權限不足或文件不存在,打開文件句柄可能會引發異常。
通常在這種情況下,應用程序可以捕獲這些異常和/或編寫通用處理程序來處理系統中的所有異常。
根據經驗,如果您知道由於應用程序無法繼續工作而存在特定情況,請將其標記為錯誤並正常處理該情況。
所有剩余的“未知 - 未知”都可以歸入“例外”類別。
HTH。
您必須編寫代碼才能忽略的例外情況。 您必須編寫代碼以不忽略的錯誤代碼。
如果沒有給定異常的異常處理程序,程序將停止執行並顯示錯誤消息。
未處理的異常是錯誤。 因此,所有錯誤都是例外,但事實並非如此。 異常處理技術處理異常/意外情況(錯誤),而錯誤是我們預期不會發生的情況,我們必須通過將用戶重定向到一些靜態HTML頁面並將其捕獲到Logs&來處理它們。想出了一個錯誤的解決方案。
錯誤可能發生在兩個級別
編譯CustomError ... CustomError錯誤....錯誤編譯注意 - 頁面級錯誤處理會覆蓋應用程序級錯誤處理。
異常處理: - >
本地(方法級別)
Will Link-> http://msdn.microsoft.com/en-us/library/ms173160(v=vs.80).aspx
例外是報告和處理執行失敗的一種方式。 換句話說,它們用於傳達錯誤條件(在“ 框架設計指南”一書中解釋Krzysztof Cwalina)。
錯誤是事件。 Exception類表示在應用程序執行(運行時)期間發生的錯誤,並提供使用try catch塊處理它們的機制。 錯誤可能是運行時或編譯器錯誤。
錯誤事件的示例:System.Web dll的HttpApplication.Error事件,System.IO的FileSystemWatcher.Error事件兩個dll都具有相同的Error事件定義
public event EventHandler Error
來自.Net Framework 4.5文檔https://msdn.microsoft.com/en-us/library/system.exception(v=vs.110).aspx
異常類表示在應用程序執行期間發生的錯誤。
錯誤和例外
出於各種原因可能會發生運行時錯誤。 但是,並非所有錯誤都應作為代碼中的異常處理。 以下是運行時可能發生的一些錯誤類別以及響應它們的適當方法。
使用錯誤。 使用錯誤表示程序邏輯中可能導致異常的錯誤。 但是,錯誤應該通過異常處理而不是通過修改錯誤代碼來解決。
程序錯誤。 程序錯誤是運行時錯誤,無法通過編寫無錯代碼來避免。
在某些情況下,程序錯誤可能反映預期或常規錯誤情況。 在這種情況下,您可能希望避免使用異常處理來處理程序錯誤,而是重試該操作。
在其他情況下,程序錯誤反映了可以在代碼中處理的意外錯誤情況。
系統故障。 系統故障是運行時錯誤,無法以有意義的方式以編程方式處理。 例如,如果公共語言運行庫無法分配額外的內存,則任何方法都可以拋出OutOfMemoryException異常。 通常,使用異常處理不會處理系統故障。 相反,您可以使用AppDomain.UnhandledException等事件並調用Environment.FailFast方法來記錄異常信息,並在應用程序終止之前通知用戶失敗。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.