try/catch



  • Ist es tatsächlich so, dass eine Variable, die in einem Try-Block definiert wird, vom nachfolgenden Programm nicht erkannt wird?

    try
    {
       int Parlament = Convert.ToInt32(Textbox.Text);
    }
    

    Parlament wird nun vom folgenden Code offensichtlich nicht erkannt.
    Das Ganze befindet sich in einer Ereignismethode (Button/Click).



  • Ja. Wobei das nicht am try liegt - Variablen, die in einem Block deklariert werden, sind ausserhalb nicht sichtbar.



  • Bei diesem einfachen Beispiel wundert mich die Frage auch etwas.
    Denn wenn man annimmt dass die Variable Parlament über den try -Block hinaus sichtbar bleiben würde stellt sich sofort die Frage: Was für einen Wert sollte Parlament denn haben wenn ToInt32 eine Exception wirft?
    Das Ergebnis der unmöglichen Konvertierung?

    Wurde hier evtl. "geht nicht - mach's trotzdem" Semantik vermutet? 🤡



  • {
        int i;
        {
            string i;
        }
    }
    

    Eigentlich sollten doch beide Variablendefinitionen möglich sein, weil sie in unterschiedlichen Blöcken sind (der string überdeckt den int zu gegebener Zeit.). Der Kompiler mahnt es nur deshalb an, weil es unsauberer Code ist?



  • Der Compiler mahnt deinen Code schon deshalb an, weil im inneren Scope die Variable "i" aus dem äußeren bereits bekannt ist.

    Die Regel ist: Innerhalb eines Scopes sind alle außerhalb definierten Variablen bekannt. Außerhalb eines Scopes ist die Variable die innerhalb des Scopes definiert wurde nicht bekannt. In C# wird es jedoch dennoch angemeckert, wenn eine Variable nach dem verlassen eines Scopes erneut deklariert wird. - Das kenne ich soweit aber auch nur vom C# Compiler.



  • In C++ funktioniert mein Beispiel.

    Eine Variable in einer Funktion überdeckt eine gleichlautende Membervariable in C#.


Anmelden zum Antworten