Во-первых, Кент прав, задаваясь вопросом, почему установка поля может вызвать исключение.
Игнорируя этот вопрос; Вы можете просто использовать простое:
try {
//do stuff
}
catch (Exception ex) {
//reset
//rethrow exception
throw;
}
Сложности возникают в отношении того, что составляет значение сброса для каждого поля?
- Последнее значение
- Значение по умолчанию
- Некоторое значение токена, обозначающее недопустимое состояние
- Смесь вышеперечисленного
Если вам нужно «сбросить» до последнего значения, вам, вероятно, понадобится какой-нибудь способ легко сохранить состояние объекта перед тем, как что-то с ним делать, наряду с возможностью легко восстановить это состояние, если что-то пойдет не так. Посмотрите Pattern Momento на изящный способ справиться с этой проблемой.