4

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

4

3 回答 3

8

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

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

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

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

于 2013-03-17T15:45:38.770 回答
5

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

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

这么说,我就不打扰了。我个人使用它们的类型名称将异常映射到错误消息:

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

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

于 2013-03-17T15:47:34.290 回答
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

于 2013-03-17T15:47:40.450 回答