Inline-Funktion wirft exception, weiß jemand wieso?

  • C#

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von SplittyDev.

    Inline-Funktion wirft exception, weiß jemand wieso?

    Hey Leute.
    Ich abreite gerade an einem Programm, welches beim starten eine Liste der Ordner im "projects" Ordner in ein Dictionary<string, string> (dateiname mit pfad, dateiname ohne pfad) laden soll.

    Ich realisiere das so:

    C#-Quellcode

    1. public static void FindProjects ()
    2. {
    3. cout.print ("Finding all projects... %s\n%i projects found.\n",
    4. (new Func<string>(() =>
    5. {
    6. try
    7. {
    8. string[] dirs = Directory.GetDirectories (Path.Combine (Environment.CurrentDirectory, "projects"));
    9. foreach (string dir in dirs)
    10. {
    11. Projects.Add (dir, dir.Substring (dir.Replace ("/", "").LastIndexOf ("")));
    12. }
    13. return "OK";
    14. }
    15. catch
    16. {
    17. return "Failed";
    18. }
    19. })), Projects.Count);
    20. }


    Edit: In den leeren Anführungszeichen steht "\\"
    Keine Ahnung, warum der code editor diese Zeichen nicht anzeigt.

    Sobald ich die funktion aufrufe wird eine System.NullReferenceException geworfen.
    Kann mir jemand erklären wieso?

    cout.print ist eine alternative zu string.format, %s steht für einen string und %i für einen integer.
    Die funktion habe ich ausgiebig getestet, sie sollte keine fehler verursachen.

    Das Dictionary wird im statischen konstruktor bereits deklariert, daran liegt es nicht.
    Grüße, Splitty

    // Edit
    Ich hab meinen Fehler gefunden, hab wohl tatsächlich vergessen, die funktion richtig aufzurufen.
    Anstatt (new func<string>(() => {...})) muss es natürlich so aussehen: (new func<string>(() => {...}))()

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „SplittyDev“ ()

    Hi @SplittyDev:
    obwohl der Thread schon als erledigt markiert wurde, hier eine kleine Anmerkung.
    Wenn du mit Files oder Directories arbeitest bietet sich die File- bzw. DirectoryInfo-Klasse an.
    Die ist sehr schön wenn es darum geht Informationen über eine Datei oder einen Ordner zu bekommen.
    So haben beide die Properties Name, welche den Namen darstellt, und FileName, welche den ganzen Pfad darstellt.
    Damit sparst du dir das lästige replacen.

    C#-Quellcode

    1. private void ReadDirectories()
    2. {
    3. Dictionary<string, string> projects = new Dictionary<string, string>();
    4. foreach (DirectoryInfo d in new DirectoryInfo(Path.Combine(Environment.CurrentDirectory, "projects")).GetDirectories())
    5. projects.Add(d.Name, d.FullName);
    6. }

    PS: Für c# kannst du den C-Code Tag benutzen, dafür einfach [ c ] ... [ / c] schreiben ;)
    Hey @LaMiy:

    Vielen Dank für deinen Vorschlag! Werd ich dann so machen :D
    Das mit dem C-Tag ist auch sehr hilfreich, wusste garnicht dass es den gibt ^^