当你知道你正在调用的方法会抛出相同的东西时,你会抛出异常吗?

Dan*_*Tao 1 .net language-agnostic exception-handling exception

说我有这样的方法*:

public T GetItem(int index)
{
    if (index < 0 || index >= _privateList.Count)
    {
        throw new ArgumentOutOfRangeException("index");
    }

    return _privateList[index];
}
Run Code Online (Sandbox Code Playgroud)

你会包括它throw还是把它留下来?一方面,我觉得立即处理无效输入是件好事,因为这样可以让您在编写实际实现代码时对所处理的内容更有信心.但是在这种情况下,如果省略了边界检查,则最终结果将大致相同(列表将抛出ArgumentOutOfRangeException而不是封闭类型).

此外,由于上面的代码正在检查我的内容,开发人员知道无论如何都会检查(在调用中_privateList[index]),似乎我正在使代码执行比上面需要更多的工作,基本上执行完全同一组比较两次.

任何有关该主题的指导将不胜感激.

*具体来说,我在谈论.NET(C#),但我认为可以向许多不同的语言/框架提出相同或类似的问题 - 因此"语言无关"标签.

Dia*_*cus 5

我尽量不添加噪音(代码没有价值).如果我的异常对我更有用,那么我会抛出异常,但如果它完全相同则代码的清晰度优先.