我想定义一个自定义异常,我想知道是否可以包含一个类而不是字符串作为消息。原因是我想以更灵活的结构发送额外的信息。
问问题
1135 次
2 回答
16
是的。只需创建一个继承自 Exception 的类。
class YourException : Exception
{
public YourException(SpecialObject thethingYouWantIncluded)
{
ExtraObject = thethingYouWantIncluded;
}
public SpecialObject ExtraObject { get; private set; }
}
然后
throw new YourException(new SpecialObject());
和
catch (YourException ex) { /* do something with ex.ExtraObject here */ }
于 2012-12-28T17:20:46.577 回答
6
是的,你可以,有点。
在 C# 中,所有异常都是类,它们是System.Exception
从该类派生的类的实例或某个类。如果要自定义异常,只需定义一个继承自Exception
.
在这个自定义类中,您可以添加您想要的任何其他属性、字段等:
public class CustomException : Exception
{
public Object CustomThing { get; set; }
}
当您将此类异常捕获到类型变量中时,CustomException
您将可以访问您定义的所有自定义属性,就像任何其他类一样。
但是,你不能Exception.Message
做的是改变它是一个字符串的事实。您的自定义消息类将具有一个Message
属性,它将是 a string
,您无法更改它。您将需要定义一个包含所有相关信息的自定义字符串。您可以覆盖该Message
属性以从您的自定义属性返回信息,但它仍然需要是一个字符串:
public class CustomException : Exception
{
public override string Message
{
get
{
if (this.CustomThing == null)
{
return base.Message;
}
else
{
return string.Format("Custom thing: {0}", this.CustomThing);
}
}
}
}
于 2012-12-28T17:26:17.793 回答