【问题标题】:Is ArgumentException right for a property in a model?ArgumentException 是否适用于模型中的属性?
【发布时间】:2015-04-10 12:39:25
【问题描述】:

检查作为string 传递的参数时,您会抛出ArgumentException

void CheckName(string name)
{
    if (name != "Alice")
    {
        throw new ArgumentException("Name is not Alice.");
    }
}

但是,当将模型(对象)传递给函数时,您检查模型的属性并希望抛出异常。哪个异常是正确的抛出?还是ArgumentException吗?

void CheckUser(UserModel model)
{
    if (model.Name != "Alice")
    {
        throw new ArgumentException("Name is not Alice."); // ?
    }
}

我应该在异常中包含paramName 参数吗? paramName 应该是 Name 还是 Model.Name

【问题讨论】:

  • IMO 我会使用new ArgumentException("UserModel.Name is not Alice", "model");

标签: c# .net exception argumentexception


【解决方案1】:

√ 如果参数错误,请抛出 ArgumentException 或其子类型之一 传递给成员。首选派生最多的异常类型,如果 适用。

√ 抛出的子类之一时请设置 ParamName 属性 参数异常。

此属性表示导致 要抛出的异常。请注意,可以使用以下之一设置属性 构造函数重载。

取自Framework Design Guidelines

是的,您可以在这种情况下抛出ArgumentException(带有model 参数)。但它似乎与您的业务逻辑有关,所以我更喜欢创建一个自定义的 excpetion,例如 InvalidUserException("This user is not allowed to do it.") 或类似的东西。

【讨论】:

  • 框架设计指南似乎没有提到当它是模型而不是原始参数时要采取的适当行动。它含糊地提到了“成员”。
  • 这就是我建议创建自定义异常的原因。我相信 ArgumentException 应该适用于原始参数。
猜你喜欢
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2015-10-17
  • 1970-01-01
相关资源
最近更新 更多