是否可以在异常中包含携带附加信息的对象
本文关键字:信息 对象 包含携 异常 是否 | 更新日期: 2023-09-27 17:49:42
我想定义一个自定义异常,我想知道我是否可以包含一个类而不是字符串作为消息。原因是我想以一种更灵活的结构发送额外的信息。
是。只需创建一个继承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 */ }
你可以,在某种程度上。
在c#中,所有异常都是类,它们是System.Exception
的实例或从其派生的某些类。如果你想定制一个异常,你只需要定义一个继承自Exception
的新类。
在这个自定义类中,您可以添加任何您想要的附加属性,字段等:
public class CustomException : Exception
{
public Object CustomThing { get; set; }
}
当你捕获这样一个异常到类型为CustomException
的变量中时,你将可以访问你定义的所有自定义属性,就像任何其他类一样。
然而,不能做的是改变Exception.Message
是字符串的事实。你的自定义消息类将有一个Message
属性,它将是一个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);
}
}
}
}