C# 我是否可以在例外中包括包含附加信息的对象?

C# 我是否可以在例外中包括包含附加信息的对象?,c#,exception,C#,Exception,我想定义一个自定义异常,我想知道是否可以在消息中包含类而不是字符串。原因是我想以更灵活的结构发送额外的信息。是的。只需创建一个从Exception继承的类 class YourException : Exception { public YourException(SpecialObject thethingYouWantIncluded) { ExtraObject = thethingYouWantIncluded; } public S

我想定义一个自定义异常,我想知道是否可以在消息中包含类而不是字符串。原因是我想以更灵活的结构发送额外的信息。

是的。只需创建一个从Exception继承的类

class YourException : Exception 
{
    public YourException(SpecialObject thethingYouWantIncluded) 
    {
        ExtraObject = thethingYouWantIncluded;
    }

    public SpecialObject ExtraObject { get; private set; }
}
然后

是的,你可以

在C#中,所有异常都是类,它们是
系统.Exception
的实例或从中派生的某个类。如果要创建自定义异常,只需定义从
exception
继承的新类

在此自定义类中,您可以添加所需的任何其他属性、字段等:

public class CustomException : Exception
{
    public Object CustomThing { get; set; }
}
当您将此类异常捕获到类型为
CustomException
的变量中时,您将可以访问您定义的所有自定义属性,就像任何其他类一样

但是,您不能更改以下事实:
Exception.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);
            }
        }
    }
}

“抛出一个类而不是一个字符串”?“抛出”关键字总是抛出一个类异常。因此,您总是抛出一个类..+1,以说明:“但是,您不能做的是更改该异常的事实。消息是一个字符串。”
public class CustomException : Exception
{
    public Object CustomThing { get; set; }
}
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);
            }
        }
    }
}