有沒有一種方法可以得到Exceptions
的相應錯誤代碼? 我需要拋出的異常錯誤代碼而不是它的消息,以便我基於錯誤代碼向用戶顯示正確的消息。如何在C#中的異常中獲取錯誤號而不是錯誤消息?
回答
如果你正在尋找的Win32錯誤代碼,這可在Win32Exception
類
catch (Win32Exception e)
{
Console.WriteLine("ErrorCode: {0}", e.ErrorCode);
}
對於普通的舊CLR例外,沒有整型錯誤碼。
鑑於你描述的問題,我會用millimoose的解決方案來獲取每種類型異常的資源字符串。
例外的要點是它們提供的信息比錯誤代碼更豐富。默認情況下,他們沒有一個,也不需要一個。如果你喜歡使用的錯誤代碼,你可以只使用您獲取的所有異常你自己的異常的基類:
public abstract class MyExceptionBase : Exception
{
public int ErrorCode { get; set; }
// ...
}
這麼說,我不會理會。我個人異常映射使用他們的類型名稱錯誤消息:
ResourceManager errorMessages = ...;
errorMessages.GetString(ex.GetType().FullName);
(你也可以創建更靈活的方案,比如使資源格式字符串和異常性插值到它們)
+1這幾乎是我所做的。 – 2013-03-17 15:54:06
無論操作系統的語言還是其他本地設置,「ex.GetType()。FullName」都會返回相同的文本(例如「System.Security.SecurityException」)嗎? – Rado 2016-08-09 05:57:19
@Rado它是代碼中的類型名稱,'.GetType().FullName'是標準的.NET反射,而不是一個異常特定的API。我約99.999%肯定不可能本地化C#中的類型名稱。 – millimoose 2016-08-14 02:57:33
對於COM異常並且升級到一個託管異常,你就可以檢索來自HResult
財產「錯誤代碼」這樣:
try {
// code goes here
} catch(System.IO.FileNotFoundException ex) {
Console.WriteLine(
String.Format("(HRESULT:0x{1:X8}) {0}",
ex.Message,
ex.HResult)
);
}
不是所有的異常然而,將會有一個有意義的HResult集。
對於.NET 3.0,3.5和4.0,你將不得不使用反射,因爲它被標記爲protected
得到HResult
屬性的值。
注意:這僅適用於.NET 4.5。 'HResult'在早期版本中受到保護。 – millimoose 2013-03-17 15:49:29
所以這就解釋了爲什麼我總是在我的Hresult中變爲空!謝謝 – Breeze 2013-03-17 15:49:54
@millimoose:你仍然可以通過其他方式獲得它(反射)。 – 2013-03-17 15:52:08
- 1. Python:獲取異常的錯誤消息
- 2. PHP錯誤處理,當錯誤是文本消息而不是拋出異常
- 3. 帶有錯誤行號的異常錯誤消息
- 4. PHP異常錯誤消息
- 5. 如何從錯誤號獲取Oracle錯誤消息?
- 6. apachebench以異常錯誤消息中止
- 7. Spring Rest Client希望看到錯誤消息而不是異常
- 8. Phalcon:顯示花哨錯誤消息而不是標準異常
- 9. 從aif異常表中獲取警告/錯誤消息
- 10. 如何使用requiredMessage屬性獲取警告消息而不是錯誤消息?
- 11. 致命錯誤:未捕獲的異常「異常」有消息「HTTP錯誤(60)
- 12. 在YouTube中獲取「invalidCategoryId」錯誤消息
- 13. 致命錯誤:未捕獲的異常「異常」有消息「1048
- 14. PHP致命錯誤:未捕獲的異常「異常」有消息
- 15. Angular2 - 捕獲異常並在視圖中顯示錯誤消息
- 16. HandleError - 如何在錯誤頁面中顯示異常消息?
- 17. 獲取錯誤消息
- 18. 客戶端錯誤異常的消息
- 19. 如何從compileAndReturnError獲取錯誤消息?
- 20. 錯誤消息中的空指針異常是什麼意思?
- 21. PHP異常而不是錯誤
- 22. 獲取錯誤消息(如果值不是None且不是value.has_key())
- 23. 警告(甚至信息消息)而不是Django中的錯誤
- 24. SslStream.AuthenticateAsClient異常(消息格式錯誤)
- 25. SQL異常錯誤消息時/從DB
- 26. 如何獲取@@錯誤號碼的消息?
- 27. 如何獲取發生錯誤的行號而不是從Django中記錄錯誤的行號開始
- 28. 在c#中的異常錯誤#
- 29. 在Apache駱駝中修改處理的異常錯誤消息
- 30. 在C++中獲取錯誤
這些COM錯誤或只是正常的CLR錯誤。 – 2013-03-17 15:43:56
目前正常的CLR錯誤。 – Breeze 2013-03-17 15:44:39
我已經看到了這個問題,ex.Hresult不適合我,(每次我嘗試它都是空的)。 – Breeze 2013-03-17 15:47:50