Historycznie, podczas programowania w .Net nie mogłem powielić nazwy zmiennej w zagnieżdżonym zakresie. Jednak po niedawnej aktualizacji programu Visual Studio 2019 do wersji 16.4.2 zauważyłem, że nazwy zmiennych można powielać w zakresie zagnieżdżonym.
Na przykład:
var test = "hello";
Console.WriteLine(test);
var things = new []{"one", "two", "three"};
things.Select(test => // <- test is duplicated here, normally this breaks compilation
{
Console.WriteLine(test);
return test;
}).ToList();
// output:
// hello
// one
// two
// three
https://dotnetfiddle.net/h85BK4
Dlaczego jest to nagle dozwolone?
Dalsze pytanie: jeśli jest to „funkcja” nowego języka, czy istnieje sposób na skonfigurowanie programu Visual Studio, aby kontynuował łamanie, gdy zmienna jest duplikowana w zakresie zagnieżdżonym?
c#
.net-core
visual-studio-2019
masterjeef
źródło
źródło
test
zmiennej, ponieważ typ danych jest taki sam. spróbuj zadeklarowaćtest
zmienną jakoint
np.var test = 12345;
myślę, że powinieneś dostać błąd kompilacji. (Nie próbowałem tego)test
zgodnie z sugestią nie ma wpływu. Możesz spróbować w skrzypce połączonym w pytaniu.Odpowiedzi:
Jest to nowa funkcja w C # 8.0, funkcja lokalna i parametry lambda mogą ukrywać nazwy zewnętrzne.
źródło
domyślam się, że funkcja select jest kompilowana jako statyczna, ponieważ nie ma żadnych połączeń z treścią metody hosta. po prostu drukuje i zwraca przedmiotowy przedmiot. nie wymaga to dostępu do metody i jako takie może być ze względów optymalizacyjnych przeniesione z treści metody i samodzielnie wprowadzone w zakres globalny.
iw tym przypadku ta zmienna testowa jest własną zmienną i nie ma powiązań z powyższą zmienną testową.
Aby temu zapobiec, nie możesz powiedzieć vs, aby wygenerował błąd, gdy wystąpi, wystarczy ręcznie zmienić nazwę zmiennej.
źródło