【问题标题】:Is it valid to use ArgumentOutOfRangeException where the "range" is not numeric in nature?在“范围”本质上不是数字的情况下使用 ArgumentOutOfRangeException 是否有效?
【发布时间】:2017-04-29 16:49:38
【问题描述】:

例如,假设我编写了一个接受字符串作为输入的方法,并且我规定该字符串应该只包含 ASCII 字符。如果调用者传入一个包含非ASCII字符的字符串,是否抛出ArgumentOutOfRangeException有效,还是应该使用ArgumentException?

The page for ArgumentOutOfRangeException 表示它是“当参数的值超出被调用方法定义的允许值范围时引发的异常”。它并没有用太多的话说所讨论的“范围”是数字的,因此对于“范围”(该类型可能值的宇宙的一个子集)的足够抽象的定义,人们可能会争辩说 ASCII 字符串示例适合。我们很可能会提到“ASCII 字符串的范围”。但是,该页面上的所有示例实际上都是数字的。确实,它们都是整数;除了一个以外,所有的索引都涉及到某种序列或集合的整数索引(唯一不符合这种模式的是关于派对客人年龄的索引,在页面底部)。

【问题讨论】:

  • 不,在这种情况下我们不会抛出 ArgumentOutOfRangeException
  • 只抛出参数异常
  • 在这种情况下你会扔哪一个并不重要。只要选择你认为合适的。

标签: c# .net exception


【解决方案1】:

维基百科说:

Range (mathematics),一个包含函数产生的输出值的集合。

还有

Set theory: [...] 集合 [...] 是对象的集合。 [...] 任何类型的对象都可以收集到一个集合中 [...]。

函数可以返回任何类型的对象,即使在数学中也是如此。它们不必是数字。它们可以是矩阵、函数(在 C# 中是委托)、真值、集合、人物、颜色等等。

所以是的,您可以将ArgumentOutOfRangeException 用于数字以外的其他类型。但由于术语“范围”经常与连续的数字范围相关,因此使用ArgumentException 可能更直观。

【讨论】:

    猜你喜欢
    • 2019-03-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2011-10-18
    相关资源
    最近更新 更多