Laden...

try, catch, finally: Variable initialisieren?

Erstellt von koller vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.631 Views
K
koller Themenstarter:in
142 Beiträge seit 2006
vor 17 Jahren
try, catch, finally: Variable initialisieren?

Hallo, habe bei der Suche im Forum leider keine Antwort für folgendes Problem gefunden:


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            StreamReader myFile;
            try
            {
                myFile =  new StreamReader("Test.txt");
                Console.WriteLine(myFile.ReadToEnd());
                Console.ReadLine();
                myFile.Close();
            }

            catch (FileNotFoundException e)
            {
                Console.WriteLine(e.Message);
                Console.ReadLine();
            }

            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.ReadLine();
            }

            finally
            {
                myFile.Close();
            }
        }
    }
}

Beim Debuggen kommt die Fehlermeldung: "Verwendung der nicht zugewiesenen lokalen Variablen myFile".
Gelernt habe ich jetzt schon, dass der Compiler die Möglichkeit berücksichtigt, dass die Zuweisung im try-Block nicht ausgeführt wird.
Wenn ich die Variable aber vor dem try-Block initialisiere, kann ich die Exception nicht abfangen. Ist das jetzt nur ein einfacher Denkfehler meinerseits?

Grüße, koller.

1.549 Beiträge seit 2004
vor 17 Jahren

ja das ist ein denkfehler weil wenn der Fehler auftritt (kann praktisch nur File not Found sein dann musst du die Datei ja nichtmehr schließen du brauchst also in diesem fall das Final garnicht ich würde es so machen das ich das mit geschachtelten Try catch lösen

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

K
koller Themenstarter:in
142 Beiträge seit 2006
vor 17 Jahren

Danke für Deine Hilfe!
So funktioniert es jetzt natürlich. Gäbe es trotzdem eine Möglichkeit das StreamReader-Objekt mit einem allgemeingültigen Wert zu initialisieren, wie z.B. 0 für einen Integer-Wert, oder "" für einen string?

Oder noch allgemeiner:

Ich möchte eine Objektvariable in einem try-Block initialisieren, jedoch in späteren catch- oder finally-Blöcken noch darauf zugreifen. Geht das? Eine "öffentliche" Vereinbarung im try-Block funktioniert bei mir auch nicht.

Grüße, koller.

1.549 Beiträge seit 2004
vor 17 Jahren

so solte es gehen


try
{
   Objekt anlegen;
   try
  {
     mach was;
  }
  catch
  {

  }

}
catch
{
}

Wir Arbeiten eigendlich nicht wir nehmen nur das geld

K
koller Themenstarter:in
142 Beiträge seit 2006
vor 17 Jahren

Jetzt verstehe ich auch, was Du mit geschachteltem try catch gemeint hast 🤔
Super 👍 und nochmals vielen Dank für Deine Hilfe!

Grüße, Koller.

M
1.439 Beiträge seit 2005
vor 17 Jahren

oder einfach


Stream s = null;
try {
   s = new FileStream(...);
   ...
} finally {
   if (s != null) s.Close();
}