In der Vergangenheit konnte ich bei der Entwicklung in .Net den Namen der Variablen im verschachtelten Bereich nicht duplizieren. Nach der kürzlich erfolgten Aktualisierung von Visual Studio 2019 auf Version 16.4.2 habe ich jedoch festgestellt, dass Variablennamen im verschachtelten Bereich dupliziert werden können.
Zum Beispiel:
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
Warum ist das plötzlich erlaubt?
Folgefrage: Wenn dies eine neue Sprachfunktion ist, gibt es eine Möglichkeit, Visual Studio so zu konfigurieren, dass es weiterhin unterbrochen wird, wenn eine Variable im verschachtelten Bereich dupliziert wird?
c#
.net-core
visual-studio-2019
masterjeef
quelle
quelle
test
Variable verwendet, da der Datentyp gleich ist. Versuchen Sie, dietest
Variable alsint
z.var test = 12345;
Ich denke, Sie sollten Kompilierungsfehler bekommen. (Ich habe es nicht versucht)test
wie vorgeschlagen hat keine Auswirkung. Sie können es in der in der Frage verlinkten Geige versuchen.Antworten:
Dies ist eine neue Funktion in C # 8.0. Lokale Funktionen und Lambda-Parameter können äußere Namen beschatten.
quelle
Ich vermute, dass die Auswahlfunktion als statisch kompiliert wird, da sie keine Verbindungen zum Hauptteil der Hostmethode hat. Es druckt nur den betreffenden Artikel und gibt ihn zurück. Dies erfordert keinen Zugriff auf die Methode und kann daher aus Optimierungsgründen aus dem Methodenkörper verschoben und innerhalb des globalen Bereichs eigenständig platziert werden.
und in diesem Fall ist diese Testvariable ihre eigene Variable und hat keine Verbindungen zu der obigen Testvariablen.
Um dies zu verhindern, können Sie vs nicht anweisen, einen Fehler auszulösen, wenn dieser auftritt. Sie müssen lediglich den Variablennamen manuell ändern.
quelle