C# Rückkehr von einem try-catch-block
Ich warum kann ich nicht zurückkehren, das Bild bekomme ich aus der url aus, die in einem try-block?
Sorry für die schlechte Englisch :(.
Dies ist die Fehlermeldung die ich bekomme:
Return-Anweisung fehlt
public static Image GetExternalImg(string name, string size)
{
try
{
//Get the image from the web.
WebRequest req = WebRequest.Create(String.Format("http://www.picturesite.com/picture.png", name, size));
//Read the image that we get in a stream.
Stream stream = req.GetResponse().GetResponseStream();
//Save the image from the stream that we are rreading.
Image img = Image.FromStream(stream);
//Save the image to local storage.
img.Save(Environment.CurrentDirectory + "\\images\\" + name + ".png");
return img;
}
catch (Exception)
{
}
}
Jede Hilfe würde geschätzt, weil ich stecken geblieben bin und jetzt :(.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn es angenommen wird null zurück, wenn das Bild nicht geladen werden, Sie können:
ansonsten, was soll die Methode zurückgeben, wenn die Ausnahme abgefangen ist ?
Als eine Ergänzung, Sie sollten nie zu verbergen, Ausnahme wie oben, es ist ein wirklich worst practice.
Müssen Sie zurück aus alle möglichen Ausführungspfade.
So, wenn Ihr
try
fehlschlägt, müssen Sie wieder zurückgeben, entweder aus dercatch
oder das Ende der Funktion.Hinweis:
Sollten Sie wirklich nicht haben, leer
catch
Blöcke - schlucken Ausnahmen ist eine wirklich schlechte Angewohnheit, die man sich stellen Debuggen und herauszufinden, wo eine Ausnahme stammten aus wirklich schwierig.Ich würde schreiben Sie die Funktion als:
Wenn Sie tun etwas in der
catch
block, entweder werfen die Ausnahme bis (throw;
) nach der Anmeldung, oder zurücknull
.Sind Sie in der Lage, um ein Objekt wieder aus einem try-block. Sie müssen sicherstellen, dass alle Ausführungspfade, dass die Rückkehr-Objekt.
Wenn wir ein Bild in einen try-block:
Wird, wenn eine exception geworfen wird, während der Aufruf GetImageFromDb() die Kontrolle an den catch-block. Dies bedeutet, wir überspringen die return-Anweisung. Der Anrufer erwartet einen Rückgabe-Wert, wenn die Kontrolle wird an den Aufrufer übergeben.
Nun müssen wir einen Wert zurück vom Fang, um die Zuweisung durchzuführen. Denn wir sind den Umgang mit Referenztypen wir können null zurückgeben (vorausgesetzt, die null ist eine gültige Stand der Ausführung). Update der Haken
Benötigen Sie eine return-Anweisung, um den Fall behandeln, wenn Sie verlassen Sie das versuchen, weil eine exception geworfen wird.
Alle code-Pfade muss eine Rückkehr, und Sie haben eine, nicht. Nämlich, geben Sie den try-block eine exception werfen, und dann schlucken Sie es in den Fang. Nachdem Sie verlassen fangen Sie nicht über eine Rückkehr.
Durch die Art und Weise, schlucken die top-level -
Exception
Typ ist böse. Tun Sie es nicht.img
lokalentry
so natürlich Sie können nicht darauf zugreifen, die außerhalb destry
. Ich kann Ihnen nicht sagen, was das richtige für Ihr Szenario. Betrachten Sie die Beseitigung der Ausnahme schlucken, oder verwenden Siereturn null
wenn Sie nicht möchten, dass zu tun.Denn wenn man eine Ausnahme ist, wird nichts zurückgegeben. Entweder Sie fangen gibt null zurück, oder die komplette Methode null zurückgeben sollte.
Können Sie eine der beiden return-Anweisungen unten.
Sie nicht über eine return-Anweisung in der "catch" - block.
Wenn
img.Save
eine Ausnahme auslöst, werden Sie dencatch
, dann lassen Sie diecatch
und nie traf einreturn
. Zum Beispiel:Muss die Funktion haben, eine
return
auf alle möglichen code-Pfade. Eine mögliche code-Pfad ist hier, dass die Körper dertry
- block eine Ausnahme auslöst, die verarbeitet wird, in dercatch
block. Die code-Pfad enthält diecatch
block hat keine return-Anweisung und somit illegal ist.Aus der
catch
block muss es entweder einreturn
oder einethrow
AnweisungHier ya go:
In Ihrem Fall sind Sie nicht garantiert zurückkehren wird Bild. Das ist, warum Sie brauchen, wieder zurückgeben, oder re-throw-exception.