据我所见,ArgumentExceptions
通常像这样使用:
public void UpdateUser(User user)
{
if (user == null) throw new ArgumentException("user");
// etc...
}
但是如果我有像这样的内容会怎样:
public void UpdateUser(int idOfUser)
{
var user = GetUserById(idOfUser);
if (user == null) throw new ArgumentException("idOfUser");
// etc...
}
那仍然是一个ArgumentException
吗?
ObjectNotFoundException
。 - xanatosArgumentException
(或派生类),那就是如果该方法可以确定接收到的idOfUser
超出范围(负数、零...取决于您的数据库规格)。然后,您将希望抛出ArgumentOutOfRange
异常。除此之外,请优先考虑设计一个生成自定义操作结果对象以指示成功或失败(以及后者原因)的设计。 - CronoArgumentException
及其派生类是开发人员
错误,因此在运行时绝不应该处理它们。永远不要以一种强制使用开发人员依赖于处理ArgumentException
来处理可能缺失的数据的方式设计API。这不是这些异常存在的目的。 - Crono