Kind-Bereich & CS0136

Den folgenden code zu kompilieren, schlägt fehl, die besagt "Eine lokale variable mit dem Namen 'st' deklariert werden können, in diesem Umfang, da würde es eine andere Bedeutung geben 'st', die bereits in ein "Kind" Bereich zu bezeichnen, dass etwas anderes":

        var l = new List<string>();
        l.Find(st => st.EndsWith("12"));
        string st = "why this fails?";

Verstehe ich, warum dies nicht funktioniert:

        string preParent = "";
        {
            string preParent = "Should fail cause we change the meaning";
        }

Wenn wir die bekommen wir "CS0103: Der name 'postParent' existiert nicht im aktuellen Kontext":

        {
            string postParent=string.Empty;
        }
        postParent = "Should this work?";

Was ich nicht verstehe ist, warum ist der compiler schlau genug, um zu sehen, dass postParent ist nicht im Umfang, aber nicht lassen Sie mich eine neue variable definieren, die denselben Namen hat wie eine variable in einem untergeordneten Bereich (was offensichtlich aus dem Rahmen an dieser Stelle).

Ist der compiler, der einfachen Durchsetzung Umfang durch die Weigerung, lassen Sie mich mit der Variablen? Wenn ja, das macht Sinn.

===========

Bearbeitet:

Ich denke, was ich auch interessant finde, ist wie Sie können die gleiche variable innerhalb von zwei untergeordnete Bereiche in eine einzelne Methode, so gilt:

        {
            string thisWorks= string.Empty;
        }
        {
            string thisWorks= "Should this work?";
        }

Ich bin nur ein wenig neugierig, dass Sie können zwei Variablen mit dem gleichen Namen, solange Sie auf dem gleichen Niveau (wenn man sich als Umfang eines Baumes). Dies macht Sinn, denn Sie können lokale Variablen, die in beiden Methoden der gleichen Klasse mit dem gleichen Namen.

Ich bin nur überrascht, dass der compiler in der Lage ist zu differenzieren und dies erlauben, während Sie würde nicht zulassen, dass die postParent variable. Und dies ist eine technische Einschränkung, oder war dies eine design-Entscheidung? Das ist, was ich wirklich erreichen wollte;-)

  • Warum downvote nach 5 Monaten jetzt?
InformationsquelleAutor JoshBerke | 2008-11-17
Schreibe einen Kommentar