【问题标题】:Handling invalid parameters处理无效参数
【发布时间】:2023-02-05 13:50:15
【问题描述】:

如果一个方法在确认 min 不大于 max 并且 min 实际上大于 max 时采用 2 个整数参数int min, int max,该方法应该抛出异常还是简单地交换值以使参数满足要求(方法( s) 如果 min 大于 max),有问题会产生意想不到的结果吗?

【问题讨论】:

  • 您的问题的答案将是主观的。这取决于上下文,尽管大多数时候重新解释调用者的意图被认为是不合适的;告诉来电者他们的意图是错误的,这样他们就不会继续这样做了。
  • 那么在几乎所有情况下,简单地抛出异常都是“合适的”,因此很可能是预期的结果。

标签: c# exception


【解决方案1】:

通常认为在这种情况下抛出异常更好,因为它允许方法的调用者以适合其用例的方式处理错误。下面是一个示例,说明如果参数无效,您可能会如何抛出异常:

public void YourMethod(int min, int max) {
    if (min > max) {
        throw new ArgumentException("min cannot be greater than max");
    }

    // your method logic goes here
}

这取决于方法的具体用例和要求。如果该方法依赖于 min 必须始终小于或等于 max 的假设,那么最好抛出异常以指示该方法不能按预期使用。这将使调用者清楚地知道输入有问题,并且可以相应地处理它。

另一方面,如果可以接受简单地交换值以便该方法仍然可以产生有意义的结果,那么简单地交换值也是可以接受的。但是,重要的是清楚地记录此行为,以便调用者知道可以交换值,并且如果 min 大于 max,则该方法的结果可能与预期不同。

【讨论】:

  • 停止在您的答案中使用“runnable sn-p”格式。它只适用于 JavaScript。
  • 这或多或少是我目前拥有的代码,我只是想弄清楚当交换值时异常是否是适当的路径会导致适当的值而不需要任何异常
  • 读完你的答案的其余部分后,这将适用的方法来自随机数生成器,如果最小值大于最大值,它本质上只会返回一个介于最小值和最大值之间的值,我交换值,结果仍将介于最小值和最大值之间,因此不是意外值,但是最小值没有理由大于最大值。
  • 在我的小脑袋里,我可能没有理解你的要求,但只要我理解。这取决于您的应用程序的具体要求和方法的预期行为。如果交换值将产生一个合适的值,并且您不需要向调用者发出错误信号,那么您可以简单地交换值并避免抛出异常。 ``` public void YourMethod(int min, int max) { if (min > max) { int temp = min;最小值 = 最大值;最大值 = 温度; } // 你的方法逻辑在这里 } ```
  • 是的,“这取决于”.这是一个基于意见的问题。不要回答那些。他们应该关闭。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多