我如何在c#异常中获得错误编号而不是错误消息?

本文关键字:错误 编号 消息 异常 | 更新日期: 2023-09-27 18:04:14

是否有方法可以获得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);

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

对于升级为托管异常的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