Historicamente, ao desenvolver no .Net, não conseguia duplicar o nome da variável no escopo aninhado. No entanto, após atualizar recentemente o Visual Studio 2019 para a versão 16.4.2, observei que os nomes de variáveis podem ser duplicados no escopo aninhado.
Por exemplo:
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
Por que isso é subitamente permitido?
Pergunta de acompanhamento: Se esse for um novo "recurso" de idioma, existe uma maneira de configurar o Visual Studio para continuar interrompido quando uma variável é duplicada no escopo aninhado?
c#
.net-core
visual-studio-2019
masterjeef
fonte
fonte
test
variável, já que o tipo de dados é o mesmo. tente declarartest
variável comoint
por exemplo.var test = 12345;
Eu acho que você deve obter erro de compilação. (Eu não tentei)test
como sugerido não tem efeito. Você pode experimentá-lo no Fiddle vinculado na pergunta.Respostas:
Esse é um novo recurso do C # 8.0, os parâmetros de função local e lambda podem sombrear nomes externos.
fonte
meu palpite é que a função select está sendo compilada como estática, pois não possui conexões com o corpo do método host. apenas imprime e retorna o item em questão. isso não requer nenhum acesso ao método e, como tal, pode, por motivos de otimização, ser retirado do corpo do método e colocado sozinho no escopo global.
e, nesse caso, essa variável de teste é sua própria variável e não possui conexões com a variável de teste acima.
quanto a evitar isso, você não pode dizer ao vs para lançar um erro quando ocorrer, você apenas terá que alterar manualmente o nome da variável.
fonte