繁体   English   中英

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

[英]Conveying additional program state info through custom exception handling

简而言之,我正在努力实现以下目标:

public class AssetParseException : Exception
{
    public AssetParseException()
    {

    }

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

    }
}

理想情况下,这将为我提供以下功能:

catch (AssetParseException exception)
{
    int idThatCausedIssue = exception.assetID;
}

我想要的额外信息是integer参数。 我想在更高级别上捕获AssetParseExceptions,并知道哪个资产引发了异常。 这可能吗? 我是否需要将所有这些信息推送到消息中,然后在更高级别进行解析?

只需添加:

public int AssetID {get; private set;}

AssetParseException类,并在使用创建新异常时进行设置

AssetParseException(string message, int assetID):base(message)
{
   AssetID = assetID;
}

我们一直在做。 知道有关异常的其他信息总是很高兴,为什么不把它放进去,因为您已经麻烦了抛出特定类型的异常。

您绝对可以做到。

您对如何做感到困惑吗? 还是只是想知道这是否是一种好习惯? 我认为这是一种好习惯。

自定义异常通常没问题,尤其是在这种情况下,您需要提供有关错误的更具体的信息。 注意事项:

  • 如果引发此异常的代码将被其他项目引用,请确保将该类公开,以使其可以在其他地方的catch语句中使用。
  • 您可能应该记录方法可能引发此自定义异常的事实。 您可以使用带有'exception'标记的xml-doc注释来指定此方法可能抛出的异常类型。
  • 通常(但并非总是)键入异常以用于特定类型的错误。 如果解析可能会以您希望能够单独处理的不同方式失败,请考虑进一步子类化,例如AssetParseNullValueException,AssetParseEncodingException等,而不是将此信息合并为更多字段或消息数据。
  • 除了上一点,有关异常的消息通常是显示给用户的。 创建主要旨在由代码解析的消息不是其目的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM