要为无法识别的ID参数抛出什么异常类型?

fea*_*net 0 .net c# exception

ITool GetTool(Guid tool)
{
    if (tool == Hammer.Id)
        return new Hammer();
    else if (tool == Drill.Id)
        return new Drill();

    else
        throw new ....?
}
Run Code Online (Sandbox Code Playgroud)

扔在这里最合适的异常类型是什么?NotSupportedException是我发现的最接近但我不认为这是正确的.

Jon*_*eet 7

我会选择一个简单的ArgumentExceptionArgumentOutOfRangeException.

对后者的描述对我来说恰到好处:

当参数的值超出被调用方法定义的允许值范围时引发的异常.

如果你认为一组允许值是一个"范围",那就没关系,我会说.

你肯定要在这里使用Guid吗?您可以使用有效工具的枚举吗?

编辑:回答创建自己的例外的建议:它会提供什么价值?你真的想抓住那个特定的例外吗?如果没有,哪里有好处?如果您将捕获该异常,那么在调用该方法之前,您是否应该验证您的参数?我发现创建一个自定义异常很少,除非真的没有什么适合.