Poniższy kod nie kompiluje stwierdzenia "Zmienna lokalna o nazwie" st "nie może być zadeklarowana w tym zakresie, ponieważ nadałaby ona inne znaczenie" st ", która jest już używana w zakresie" potomnym " na oznaczenie czegoś innego „:Child Scope & CS0136
var l = new List<string>();
l.Find(st => st.EndsWith("12"));
string st = "why this fails?";
rozumiem dlaczego to nie będzie działać:
string preParent = "";
{
string preParent = "Should fail cause we change the meaning";
}
Kiedy mamy następujące dostajemy” CS0103: nazwa «postParent» nie istnieje w bieżącym kontekst ":
{
string postParent=string.Empty;
}
postParent = "Should this work?";
Czego nie rozumiem, to dlaczego kompilator jest wystarczająco inteligentny, aby zobaczyć, że postParent nie jest w zasięgu, ale nie pozwala mi zdefiniować nowej zmiennej, która ma taką samą nazwę, jak zmienna używana w zasięgu podrzędnym (co oczywiście jest poza zakresem).
Czy prosty zakres zastosowania kompilatora jest wymuszany przez odmowę zezwolenia na użycie zmiennej? Jeśli tak, to ma sens.
===========
Zmieniano:
myślę, co ja również znaleźć interesujące jest to, w jaki sposób można mieć tej samej zmiennej w dwóch zakresach dzieci w jednej metody, tak to jest ważne:
{
string thisWorks= string.Empty;
}
{
string thisWorks= "Should this work?";
}
Jestem po prostu trochę dziwne, że można mieć dwie zmienne o tej samej nazwie, o ile są one na tym samym poziomie (jeśli spojrzeć na zakres postaci drzewa). Ma to sens, ponieważ możesz mieć zmienne lokalne w dwóch metodach tej samej klasy o tej samej nazwie.
Jestem zaskoczony, że kompilator jest w stanie odróżnić i zezwolić na to, podczas gdy nie pozwoli na to zmienna postParent. Czy to jest techniczne ograniczenie, czy też była to decyzja projektowa? To właśnie próbuję dostać ;-)
Dlaczego spadek po 5 miesiącach? – JoshBerke