当参数与彼此冲突时抛出的最合适的异常是什么?

时间:2011-09-15 08:01:18

标签: .net exception arguments

如果之前有人问过我很抱歉 - 但我找不到类似的问题。

我有一个对象,它代表一个查询和结果的排序规范。我希望语义是你可以为查询指定null(即返回所有结果),你可以为订单指定null(即以任何顺序返回结果),但你不能为两者指定null(因为那么为什么你在使用查询引擎......)

因此,ArgumentExceptionArgumentNullExceptionArgumentOutOfRangeException似乎不正确,因为它不是一个参数 - 而且他们的文档评论都是指单数。

任何指针?

感谢。

3 个答案:

答案 0 :(得分:3)

如果这只是为了帮助开发人员使用您的方法,那么请使用标准的InvalidOperationExceptionArgumentException,并提供有用的消息,并将其保留。把时间放在更重要的领域。

如果要从UI或其他进程驱动,那么您不应该遇到异常,因为验证输入会更好。如果你在方法中进行输入验证,那么也许可以考虑一个自定义的InvalidInputException,再次使用一条消息(我不打算开始“输入错误异常?”辩论......)。

不要过于担心文档的细节。只要使用一定程度的常识,您的同事就能够了解正在发生的事情。

答案 1 :(得分:1)

我认为NotSupportedException会描述你在

获得的内容

答案 2 :(得分:1)

.NET Framework中有先例,其中检查取决于多个参数的值。

例如,ArrayList.CopyTo(int index, Array array, int arrayIndex, int count)

在这种情况下,如果(index + count)比ArrayList的大小更新,则抛出ArgumentException,使用ArgumentException构造函数的重载,不使用{{ 1}}论证。

这与您的情况类似。