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

时间:2013-03-17 15:42:09

标签: c# exception exception-handling

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

3 个答案:

答案 0 :(得分:8)

如果您正在寻找win32错误代码,可以在Win32Exception

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

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

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

答案 1 :(得分:5)

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

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

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

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

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

答案 2 :(得分:3)

对于升级到托管例外的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,您必须使用反射来获取HResult属性的值,因为它标记为protected