如何在C#中的exception中获取错误号而不是错误消息?

有没有办法可以获得Exceptions的相应错误代码? 我需要抛出exception错误代码而不是它的消息,以便我根据错误代码向用户显示正确的消息。

如果您正在寻找win32错误代码,那么可以在Win32Exception类中找到它

 catch (Win32Exception e) { Console.WriteLine("ErrorCode: {0}", e.ErrorCode); } 

对于普通的旧CLRexception,没有整数错误代码。

鉴于您描述的问题,我将使用millimoose的解决方案来获取每种类型的exception的资源字符串。

exception的全部意义在于它们提供的信息比错误代码更丰富。 默认情况下,它们没有一个,并且不需要一个。 如果您喜欢使用错误代码,您可以使用自己的exception基类,从中派生所有例外:

 public abstract class MyExceptionBase : Exception { public int ErrorCode { get; set; } // ... } 

那就是说,我不会打扰。 我个人使用他们的类型名称将exception映射到错误消息:

 ResourceManager errorMessages = ...; errorMessages.GetString(ex.GetType().FullName); 

(您还可以创建更灵活的方案,例如使资源格式化字符串并将exception属性插入其中。)

对于升级到托管exception的COMexception,您将能够从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,您必须使用reflection来获取HResult属性的值,因为它被标记为protected