通过自定义异常处理传送其他程序状态信息

简而言之,我正在努力实现这样的目标:
public class AssetParseException : Exception
{
    public AssetParseException()
    {

    }

    public AssetParseException( string message/*, int assetID*/ ): base(message)
    {

    }
}
理想情况下,这会给我这个功能:
catch (AssetParseException exception)
{
    int idThatCausedIssue = exception.assetID;
}
我想要的额外信息是整数参数。我想在更高级别捕获AssetParseExceptions并知道哪个资产引发了异常。这可能吗?我是否需要将所有这些信息推送到邮件中,然后在更高级别解析它?     
已邀请:
只需添加:
public int AssetID {get; private set;}
到你的
AssetParseException
类并在使用时创建新的异常时设置它
AssetParseException(string message, int assetID):base(message)
{
   AssetID = assetID;
}
我们一直这样做。知道关于异常的其他信息总是很好,为什么不把它放进去,因为你已经麻烦扔掉一个特定类型的异常。     
你绝对可以做到这一点。 你对如何做到这一点感到困惑吗?或者只是想知道这是不是很好的做法?在我看来,这是一种很好的做法。     
自定义异常通常很好,特别是在这种情况下,您提供有关错误的更具体信息。要注意的一些事项: 如果抛出此异常的代码将被其他项目引用,请确保将该类公开为public,以便可以在其他地方的catch语句中使用它。 您应该记录方法可能抛出此自定义异常的事实;您可以使用带有“exception”标记的xml-doc注释来指定此方法可能抛出的异常类型。 通常(但并非总是)键入例外以用于特定类型的错误。如果解析可能以您希望能够单独处理的不同方式失败,请考虑进一步的子类化,例如AssetParseNullValueException,AssetParseEncodingException等,而不是将此信息合并为更多字段或消息数据。 继前一点之后,关于异常的消息通常是向用户显示的消息。创建主要设计为通过代码解析的消息不是他们的目的。     

要回复问题请先登录注册