获得innerexception C#的属性

时间:2016-07-23 02:20:51

标签: c# exception exception-handling

我创建了一个自定义异常类,如下面的

public class FailedException : Exception
{
  private string failedtext;

  public FailedException(string message) : base(message)
  {
  }

  public FailedException(string message) : base(message, innerException)
  {
  }

  public string failedtext
  {
    get {return failedtext;}
    set {failedtext = value;}
  }
}

我可以在抛出异常时设置属性failedtext,但无法在主代码中获取失败文本;异常来自一个不足之处,我可以看到该属性,但无法得到它。有没有办法做到这一点?

我想获取failtext的值来处理错误。感谢。

1 个答案:

答案 0 :(得分:2)

如果您的主要代码如下所示:

try
{
  ThisWillThrow()
}
catch(Exception ex)
{
  ex.InnerException.failedtext; //compile error on this line
}

问题是InnerException属性被输入为Exception。您可以通过将catch块更改为:

,将对象安全地转换为自定义类型
catch(Exception ex)
{
  FailedException fex = ex.InnerException as FailedException;
  if (fex != null)
  {
    string text = fex.failedtext;
  }
}

还要考虑使用Exception的Data属性而不是此自定义类型:

//thrower's code
Exception x = new Exception("my message");
x.Data["failedtext"] = "my failed text";

//catcher's code:
catch(Exception ex)
{
  if (ex.Data.Contains("failedtext") && ex.Data["failedtext"] is string)
  {
    string text = ex.Data["failedtext"];
  }
}

此外,您的属性是递归定义的。将其更改为:

  public string failedtext
  {
    get;
    set;
  }