So habe ich während meines ersten Projekts, das C# lernt, einige Try/Catch-Blöcke benutzt. Zum größten Teil haben sie gut funktioniert. Es gibt jedoch ein Paar, bei dem der Code trotz der Tatsache, dass er den genauen Ausnahmetyp findet, den ich erwartet und erhofft habe, immernoch bricht. Ich werde ein Beispiel für Code angeben, bei dem dieses Problem auftritt.Ausnahmen fangen nicht mit Catch-Block. Warum?
Hier ist, wo ich versuche, die Ausnahme zu fangen:
app.MoveFolder(input1, input2);
try
{
//code here
}
catch(ArgumentException)
{
//code here
}
break;
Hier ist die Funktion, wo ich die Ausnahme erstellen:
public void MoveFolder(string folderPath, string newLocation)
{
this.ThrowExceptionIfFolderDoesntExist(folderPath);
if (Directory.Exists(newLocation) == true)
{
throw new ArgumentException("pls wrk");
}
Directory.Move(folderPath, newLocation);
}
Die 'ThrowExceptionIfFolderDoesntExist()' Funktion führt dies:
Also, wie Sie sehen können, sowohl diese und die if-Anweisung in meiner MoveFolder() -Funktion sollte ArgumentExceptions zurückgeben, von denen ich gehofft hatte, sie zu erfassen. Im Falle der letzteren Funktion funktioniert das wie beabsichtigt. Allerdings, wenn ich versuche, einen Ordner an einen Speicherort zu verschieben, die bereits vorhanden ist, dann erhalte ich das folgende:
Unhandled Exception: System.ArgumentException: pls wrk
Das ist nicht, was ich will, wie ich den catch-Block behandeln dieses besondere Argument auch will . Hat das etwas mit dem Catch-Block zu tun, denke ich, dass ich mich auf eine spezielle Argument-Ausnahme beziehe? Ich hätte gedacht, dass es sich auf alle ArgumentExceptions beziehen würde.
Wie kann ich dieses Problem lösen?
Danke.
Nun, der Aufruf von MoveFolder befindet sich nicht im try Block, warum erwarten Sie, die Ausnahme zu fangen? – Steve
Das Objekt, das die Ausnahme (MoveFolder) auslöst, existiert außerhalb des try-catch-Blocks. Verschiebe app.MoveFolder (input1, input2) in den try Block –
'app.MoveFolder (input1, input2); 'muss in dem' try' sein ... Wo dein erster '// code here' Kommentar ist – pinkfloydx33