Итак, я использовал несколько блоков try/catch во время моего первого обучения C#. По большей части они отлично работали. Однако есть пара, где код все еще ломается в точке исключения, несмотря на то, что он находит точный тип исключения, о котором я ожидал и надеялся. Я приведу пример кода, в котором эта проблема возникает.Исключения, не ловящиеся с использованием блока catch. Зачем?
Вот где я пытаюсь поймать исключение:
app.MoveFolder(input1, input2);
try
{
//code here
}
catch(ArgumentException)
{
//code here
}
break;
Вот функция, где я создаю исключение:
public void MoveFolder(string folderPath, string newLocation)
{
this.ThrowExceptionIfFolderDoesntExist(folderPath);
if (Directory.Exists(newLocation) == true)
{
throw new ArgumentException("pls wrk");
}
Directory.Move(folderPath, newLocation);
}
В 'ThrowExceptionIfFolderDoesntExist()' функция приводит к следующему:
private void ThrowExceptionIfFolderDoesntExist(string folderPath)
{
if(this.CheckFolderExists(folderPath) == false)
{
throw new ArgumentException("This folder does not exist");
}
}
Итак, как вы можете видеть, и это, и оператор if в моей функции MoveFolder() должен возвращать аргументы, которые я надеялся поймать. В случае последней функции это работает по назначению. Однако, если я пытаюсь переместить папку в папку, которая уже существует, то я получаю следующее:
Unhandled Exception: System.ArgumentException: pls wrk
Это не то, что я хотел, как я хочу, чтобы блок задвижки справиться с этой конкретной ArgumentException также , Является ли это чем-то связанным с блоком catch catch, я имею в виду конкретное исключение аргумента? Я бы подумал, что это будет относиться ко всем аргументам ArgumentExceptions.
Как я могу это решить?
Спасибо.
Ну, вызов MoveFolder не находится внутри блока try, почему вы ожидаете получить исключение? – Steve
вещь, которая бросает исключение (MoveFolder), существует вне блока catch try. перемещение app.MoveFolder (input1, input2) внутри блока try –
'app.MoveFolder (input1, input2); 'должен находиться внутри' try' ... Где ваш первый комментарий «// code here' is – pinkfloydx33