解析字节数组时抛出什么异常?(c#)

本文关键字:异常 什么 字节 字节数 数组 | 更新日期: 2023-09-27 18:06:35

我正在解析一个字节数组,它实际上是在消息总线上发送的固定长度的记录。如果数据无效(乱码或不符合记录的规范),那么我想抛出异常。像这样:

public DomainObject ParseTheMessage(byte[] payload){
    Validate(payload);//throws an exception if invalid
    ...do creation of domain object
}

有没有人知道,如果有一个好的标准异常,我可以抛出在这些情况下,或者我应该只是创建自己的特定异常?

解析字节数组时抛出什么异常?(c#)

您可以直接使用ArgumentException:

throw new ArgumentException("payload", "'payload' should be...");

正如下面x0r所提到的,MSDN建议只从ArgumentException派生,这样做可能会或可能不会给你任何附加价值,这取决于通过参数传递的"无效"参数的定义-如果你可以定义严格的规则,那么你可能会从创建更精确命名的异常中受益ArgumentException派生。

或者,如果您有相同类型的信息消息,您可以使用InvalidDataException:

当数据流的格式无效时抛出的异常。

虽然指的是数据流,但可能会有一些反对意见——让我们看看。

如果它只是一个通用的"坏格式"异常,那么你确实有FormatException -但这可能是faaar对于你的情况来说太通用了(见上文),尽管可能是一个更好的异常派生,它确实取决于:

当实参的格式不符合被调用方法的形参规范时引发的异常。

你可以抛出一个带有自定义InnerException的ArgumentException。

如果数据有效性标准是特定于应用程序的,并且不匹配任何一般情况(如索引超出范围等),我认为最好使用您自己的异常。对于标准情况,请使用现有异常,例如,如果payload == null,则使用NullPointerException

系统。ArgumentOutOfRangeException:

ArgumentOutOfRangeException在方法被调用时被抛出传递给该方法的参数中至少有一个不是空的不包含有效值

throw new ArgumentOutOfRangeException("payload","description of the specific problem");