我们有一个WebForms控件,它要求提供实现ITextControl的另一个Control的ID。
如果没有对该ID的控制或找不到控件但是它没有实现接口,我们应该抛出什么异常?
var text = Page.FindControl(TextProviderId) as ITextControl;
if (text == null) {
throw new WhatEverException(...);
...
我们应该将它分成两种情况,如果没有该ID的控制则抛出一个异常,如果所述控制没有实现ITextControl则抛出另一个异常?如果是,那么我们应该使用哪些例外?
答案 0 :(得分:2)
如果控件真的应该存在,我会说你的网页表单如果丢失就处于无效状态,所以我可能会去InvalidOperationException
:
当方法调用对象的当前状态无效时引发的异常。
这适用于两种情况;无论控件是否缺失或者是否未实现预期的接口,包含的对象都处于无效状态。
如果这是一个预计会因各种原因发生的情况(假设您正在制作一些其他人会编程的工具,而这种情况可能很好),或许您应该创建两个自定义异常,可以清楚地说明正在发生的事情以及如何纠正它(例如ControlNotFoundException
和InterfaceNotFoundException
或类似内容。
答案 1 :(得分:0)
答案 2 :(得分:0)
你是否应该将它们分成不同的例外可能取决于你是否认为任何人都可能想要区分不同捕获块中的两个例外。
不知道具体如何使用,这似乎是应该引起开发人员注意的那种错误,其中重写代码以指向正确的文件或实现正确的接口是正确的操作,而不是实现try-catch并提供用户友好的错误消息。因此,我只想抛出ArgumentException
。