Объект никогда не должен находиться в недопустимом состоянии. Объект должен выдать исключение, как только потребитель попытается установить для него недопустимое состояние.
Ваш объект может находиться в непригодном для использования состоянии (скажем, это объект подключения к базе данных, и он еще не подключен), в этом случае он должен иметь флаг IsConnected или он должен следовать за шаблон конечного автомата , так что состояние объекта остается действительным само по себе.
И поскольку ваша перегрузка ToString (), по-видимому, не принимает никаких аргументов, вызывающий никогда не должен быть ошибкой вызывающей стороны, что он вызовет исключение.
Следовательно, нет, я не могу вспомнить ни одного исключения, которое ToString () будет выдавать.
Редактировать : В случае кода вставки лучший способ сделать это - объединить параметры запроса в отдельный класс - назовите его SearchParameters или что-то в этом роде.
Сначала заполните это, а затем передайте это в класс, который будет генерировать код SQL. Если при передаче объекта SearchParameters в SearchQuery (возможно, через конструктор, чтобы вы могли сделать его неизменным) параметры являются недействительными, вы можете выбросить исключение.
Таким образом, если ваш объект SearchQuery когда-либо имеет больше методов, которые полагаются на наличие действительного поискового запроса, вам не нужно будет повторять код проверки, и, конечно, ToString () никогда не вызовет исключение.