Проверка данных в конструкторе - PullRequest
3 голосов
/ 16 сентября 2010

У меня есть конструктор, который должен проверять переданные данные.

public Rational(int m, int n)

Если n == 0, я должен сообщить об этом пользователю.
Я знаю 3 способа сделать это.

1) Просто сделайте return; в конструкторе
2) Сгенерируйте исключение
3) Создайте статический метод, который создаст объект

r = new Rational();
r = Rational.GetObject(1,2);

Каков наилучший способ проверки данных вконструктор?

Ответы [ 5 ]

8 голосов
/ 16 сентября 2010

Учитывая, что вы имеете дело с недопустимым аргументом, передаваемым в конструктор, я, вероятно, выбросил бы новый ArgumentException из конструктора.

2 голосов
/ 16 сентября 2010

Вы должны бросить ArgumentOutOfRangeException в конструктор.(Обязательно укажите имя параметра в дополнение к сообщению об исключении)

Кроме того, вы также можете сделать статический метод TryCreate:

public static bool TryCreate(int m, int n, out Rational result);

или

public static Rational? TryCreate(int m, int m);

Этот метод будет возвращать false или null, если параметры недопустимы вместо выдачи исключения;аналогично int.TryParse.

2 голосов
/ 16 сентября 2010

Две вещи:

  • Бросить ArgumentOutOfRangeException в конструктор.
  • Проверьте значение, введенное пользователем, перед вызовом конструктора и сгенерируйте подходящее сообщение об ошибке. Исключением должно быть последнее средство.
1 голос
/ 16 сентября 2010

Создайте исключение: вы не можете позволить пользователю поиграть (создать) объект, который не будет работать.

0 голосов
/ 16 сентября 2010

Я бы скинул System.ArgumentException из конструктора.

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