我创建了一个自定义异常类,如下面的
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的值来处理错误。感谢。
答案 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;
}