Hallo zusammen,
ich bekomme bei folgendem Codebeispiel immer die Fehlermeldung, dass nicht alle Codepfade einen wert zurück liefern.
Was mache ich denn da bitte falsch?
Danke für die Antworten!
Gruß
Luis
public string DirSearch1(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d))
{
return f;
}
DirSearch1(d);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
Hallo,
sollte ein Fehler auftreten, springt er in den catch-Block. Im Catch Block gibt es aber kein Return. Wenn ein Rückgabetyp definiert ist, muss aber **immer **etwas zurückgegeben werden.
knub
Hi,
das tut er allerdings auch ohne try und catch also bei folgendem Beispiel.
Sorry, hätte direkt den Codeausschnitt nehmen sollen.
public string DirSearch1(string sDir)
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d))
{
return f;
}
DirSearch1(d);
}
}
hallo Luis_80 und herzlich willkommen,
es könnte ja passieren das er in dene schleifen gar nicht rein geht
in meinen augen macht dieser code ausschnitt sowiso kein sinn
schreib doch mal bitte was dieser code machen soll
mfg
Hi,
nenn mich Fantasie los, aber was soll die Methode eigentlich machen ?
Eine rekursive Suche durch alle Ordner und Unterordner.
ich will damit an jede Einzelnen Dateipfa kommen um eine andere Datei damit vergleichen zu können.
Um mir alle Dateien listen zu lassen sähe das dann so aus.
public void DirSearch1(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d))
{
Console.WriteLine(f);
}
DirSearch1(d);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt);
}
}
Ich möchte aber mit allen Ausgaben arbeiten können.
Ist das so falsch gedacht.
Hi,
wie findet ihr diesen Versuch ?
public static List<string> DirSearch1(string sDir)
{
try
{
List<string> retVal = new List<string>();
foreach (string f in Directory.GetFiles(sDir))
retVal.Add(f);
foreach (string d in Directory.GetDirectories(sDir))
retVal.AddRange(DirSearch1(d));
return retVal;
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt);
return null;
}
}
Das werde ich auch mal ausprobieren!
Versteh aber nach wie vor nicht wo der Fehler bei meinem Beispiel liegt, selbst wenn ich im catch block einen string ausgeben lasse funktioniert es nicht.
Vielen Dank an alle und einen schönen Abend noch
Gruß
Luis
Hallo Luis_80,
es geht ja nicht darum einen string auszugeben, sondern ihn mit einem return zurückzugeben.
Denn wenn du für deine Methode einen Rückgabetyp definierst muss auch gewährleistet sein, dass die Methode etwas zurückgibt.
In deinem Beispiel könnte es ja theoretisch passieren, dass im try Block ein Fehler auftritt, und zwar VOR der return-Anweisung. Da im catch-Block kein return da ist würde die Methode dann keinen Wert zurückgeben.
Also musst du in den catch-block einen return einbauen, der beispielsweise null zurückgibt. [vgl. Beispiel von a957m].
mfg Atlan
Hatte ich auch gemacht, nur nach dem Catch block fehlte noch eine.
Die Methode von a957m ist aber eh viel schöner besser zu verwursten 😉
Hatte ich auch gemacht, nur nach dem Catch block fehlte noch eine.
Ja, hat aber Blackcoin oben schon geschrieben. Wenn Directory.GetDirectories(sDir) oder Directory.GetFiles(d) leer ist, kommt er nie zum return.
Grüße
Elric