我想定义一个自定义异常,我想知道我是否可以包含一个类而不是字符串作为消息.原因是我想在一个更灵活的结构中发送额外的信息.
hom*_*ast 16
是.只需创建一个继承自Exception的类.
class YourException : Exception
{
public YourException(SpecialObject thethingYouWantIncluded)
{
ExtraObject = thethingYouWantIncluded;
}
public SpecialObject ExtraObject { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
然后
throw new YourException(new SpecialObject());
Run Code Online (Sandbox Code Playgroud)
和
catch (YourException ex) { /* do something with ex.ExtraObject here */ }
Run Code Online (Sandbox Code Playgroud)
是的,你可以,有点.
在C#中,所有异常都是类,它们System.Exception
是从中派生的实例或某些类.如果要创建自定义异常,只需要定义一个继承自的新类Exception
.
在此自定义类中,您可以添加所需的任何其他属性,字段等:
public class CustomException : Exception
{
public Object CustomThing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当您将这样的异常捕获到类型变量中时,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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1047 次 |
最近记录: |