Históricamente, al desarrollar en .Net, no podía duplicar el nombre de la variable en el ámbito anidado. Sin embargo, después de actualizar recientemente Visual Studio 2019 a la versión 16.4.2, he notado que los nombres de variables pueden duplicarse en un ámbito anidado.
Por ejemplo:
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 qué se permite esto de repente?
Pregunta de seguimiento: si se trata de una nueva "característica" del lenguaje, ¿hay alguna forma de configurar Visual Studio para que continúe interrumpiéndose cuando una variable se duplica en un ámbito anidado?
c#
.net-core
visual-studio-2019
masterjeef
fuente
fuente
test
variable ya que el tipo de datos es el mismo. intente declarartest
variable comoint
p. ej.var test = 12345;
Creo que deberías obtener un error de compilación. (No lo he probado)test
como se sugiere no tiene ningún efecto. Puede probarlo en el violín vinculado en la pregunta.Respuestas:
Esta es una nueva característica en C # 8.0, la función local y los parámetros lambda pueden sombrear los nombres externos.
fuente
Supongo que la función de selección se está compilando como estática, ya que no tiene conexiones con el cuerpo del método host. solo imprime y devuelve el artículo en cuestión. esto no requiere ningún acceso al método y, como tal, puede, por razones de optimización, salir del cuerpo del método y colocarse por sí solo dentro del alcance global.
y en este caso, esa variable de prueba es su propia variable y no tiene conexiones con la variable de prueba anterior.
en cuanto a evitar esto, no puede decirle a vs que arroje un error cuando ocurra, solo tendrá que cambiar manualmente el nombre de la variable.
fuente