Вы можете попытаться взять циклы while и поместить их в свои собственные функции, которые возвращают действительный путь к файлу и входные данные и генерируют исключения, если они перехвачены. Например:
public string FindValidFilepath()
{
string filePath = string.Empty
try{
while (!validFilePath)
{
Console.Write("Please enter the full path to the file you would like to import: ");
filePath = Console.ReadLine().Replace("\"","");
if (File.Exists(filePath))
validFilePath = true;
}
} catch (Exception ex) {
throw;
}
return filePath
}
и вызовите его из главной функции. Другие вещи, которые вы можете сделать, которые уменьшат количество ошибок, если вам нужно добавить код, - это поставить фигурные скобки, {, вокруг кода внутри ваших операторов If. Хотя их отсутствие синтаксически допустимо, это предотвратит появление ошибки позже. Я был укушен такой ошибкой в прошлом.
РЕДАКТИРОВАТЬ: повторное выбрасывание этого исключения так, чтобы оригинальный блок Try-Catch мог остаться на месте. Кроме того, я узнал, что «throw ex» теряет трассировку стека, но просто «throw» сохраняет ее. Я исправил эту проблему.
РЕДАКТИРОВАТЬ 2: Еще одна вещь, о которой я подумал: попробуйте перехватить определенные исключения и вывести конкретную ошибку, объясняющую, что пошло не так для пользователя, чтобы он мог лучше понять проблему. Большинство пользователей не понимают трассировку стека, если не требуется вывод трассировки стека.
Кроме того, прошу прощения за любые небольшие синтаксические ошибки, я больше знаком с Java, чем с C #.