Какое исключение выдается, если не найден элемент управления WebForms, который "должен" быть там - PullRequest
1 голос
/ 20 октября 2010

У нас есть элемент управления WebForms, который требует предоставления идентификатора другого элемента управления, реализующего ITextControl.

Какое исключение следует выдать, если нет элемента управления с этим идентификатором или элемент управления найден, но не реализуетinterface?

var text = Page.FindControl(TextProviderId) as ITextControl;

if (text == null) {
   throw new WhatEverException(...);
...

Должны ли мы разделить его на два случая и выдать одно исключение, если элемент управления с этим идентификатором отсутствует, и другое, если указанный элемент управления не реализует ITextControl?Если да, то какие исключения мы должны использовать тогда?

Ответы [ 3 ]

2 голосов
/ 20 октября 2010

Если элемент управления действительно должен быть там, я бы сказал, что ваша веб-форма находится в недопустимом состоянии, если она отсутствует, поэтому я бы, вероятно, выбрал InvalidOperationException:

Исключение, которое выдается, когда вызов метода недопустим для текущего состояния объекта.

Это будет применимо к обоим сценариям; независимо от того, отсутствует ли элемент управления или если он не реализует ожидаемый интерфейс, содержащий объект находится в недопустимом состоянии.

Если это сценарий, который, как ожидается, произойдет по разным причинам (скажем, вы создаете какой-то инструмент, против которого будут программировать другие, и это ситуация, которую они вполне могут создать), возможно, вам следует вместо этого создать два пользовательские исключения, которые очень ясно дают понять, что происходит и как это исправить (например, ControlNotFoundException и InterfaceNotFoundException или что-то подобное).

0 голосов
/ 20 октября 2010

То, стоит ли вам разбивать их на разные исключения, вероятно, больше всего зависит от того, считаете ли вы, что кто-то захочет различить два исключения в разных блоках улова.

Не зная точно, как это будет использоваться, это похоже на ошибку, на которую следует обратить внимание разработчика, когда переписывание кода для указания на правильный файл или реализация правильного интерфейса - это правильное действие, а не реализация Попробуйте поймать и дать удобные сообщения об ошибках. Таким образом, я бы просто бросил ArgumentException.

0 голосов
/ 20 октября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...