当给定的参数一起给出时无效时,接受多个参数的方法应该抛出哪个异常?
例如,考虑
public Bar DoSomething(Foo f1, Foo f2)
{
//implementation...
}
如果要完成操作取决于f1和f2之间的某种关系或相似性(如果数组/集合必须大小相同;如果运动员则必须在同一队/对立团队中,等等).
每个参数都是该操作的有效参数,但是它们一起无效.例:
public MatchResult PlayMatch(Player a, Player b)
{
if(a.Team == b.Team)
{
//Throw exception here, since players must be on different teams
}
//Play match, determine winner
}
抛出ArgumentException似乎是不正确的,因为它暗示一个参数无效,而不是一对参数无效.
解决方法:
您不必抛出异常.我认为,这甚至不应该引发异常,因为这是匹配逻辑的重要部分.我只是让匹配失败(返回零或您所做的一切),并在文档中提到了这一事实-诸如“比较来自不同团队的两名球员”.这意味着比较来自同一团队的球员将导致失败.