从异常类中识别特定异常的方法

时间:2010-05-18 07:49:33

标签: asp.net

HIII。

是否有任何方法可以从常规异常类中唯一标识特定异常。

,即检索用于标识特定异常的唯一标识符的任何属性或方法。

我在xml文件中保留了一些错误值和相应的错误文本。我想读取该xml文件,并且必须获取错误ID并将相应的文本修复为标签。在系统异常的情况下,我们必须识别特定的异常。

1 个答案:

答案 0 :(得分:3)

使用Exception.HResult

” HRESULT是一个32位值,分为三个不同的字段:严重性代码,设施代码和错误代码。严重性代码指示返回值是表示信息,警告还是错误。设施代码标识负责该错误的系统区域。 错误代码是分配用于表示异常的唯一编号。每个异常都映射到不同的HRESULT。当托管代码抛出异常时,运行时将HRESULT传递给COM客户端。当非托管代码返回错误时,HRESULT将转换为异常,然后运行时抛出该异常。 “

来自http://msdn.microsoft.com/en-us/library/system.exception.hresult%28v=VS.100%29.aspx

UPDATE: HResult字段在System.Exception基类上受到保护,因此您无法访问它。派生的COM类使用HResult,因为它是在COM下报告错误的主要方式,托管代码不使用它。

我建议您创建自己的Exception类型,其中包含GUID

    public class MyExceptionWrapper : Exception
    {
      //Have a read on GUIDs and use one of the other constructors if possible.
        public Guid GUID { get; set; } 
      //Construct your Exception type using the constructor from System.Exception 
      // and then assign the GUID.
        public MyExceptionWrapper(string message, Exception inner) : 
            base(message, inner)
        {
            GUID = new Guid();
        }
    }

然后,您可以使用此模式进行错误处理:

 try
 {
     //cause an error
 }
 catch(Exception ex)
 {
     MyExceptionHandlerMethod(new MyExceptionWrapper("I caused an error", ex));
     //OR - to throw up the stack
     throw new MyExceptionWrapper("I caused an error", ex);
 }