En C# puede hacer un bloque dentro de un método que no está asociado a ninguna otra instrucción.¿Cuál es el valor de un bloque anónimo no asignado en C#?
public void TestMethod()
{
{
string x = "test";
string y = x;
{
int z = 42;
int zz = z;
}
}
}
Este código se compila y se ejecuta como si las llaves dentro del método principal no estuvieran allí. También note el bloque dentro de un bloque.
¿Hay alguna posibilidad de que esto sea valioso? Todavía no he encontrado ninguno, pero tengo curiosidad por conocer los hallazgos de otras personas.
¿Has verificado esto realmente en el nivel de VM? La mayoría de los compiladores y GC razonables tenderán a colapsar los dos bloques en uno solo durante el proceso de compilación y GC un valor después del último uso de la variable que hace referencia a él. – emk
No he verificado la recolección de basura, pero he verificado el alcance. Estoy bastante seguro de que el recolector de basura .NET recogerá cosas que han dejado alcance/no están referenciadas. –
¡El GC podría entrar en acción, pero puede que no lo haga por un tiempo! La pérdida de alcance no significa GC automático. Además, en este caso, para los tipos de valores no habría habido nada para GC. Scoping es el objetivo principal aquí, no GC. –