Crea un nuevo alcance para las variables que utilizó. El alcance de las variables puede ser complicado a veces. Por ejemplo, en el código que publicaste;
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
i = 1; // Error: The name 'i' doesn't exist in the current context
break;
}
El error tiene sentido aquí como en case(b)
variables a
se accede fuera de alcance. Ahora, por otro lado,
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
int i = 1; // Error: A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
break;
}
Los dos errores anteriores se ven contradictorios entre sí. Para evitar esto se debe definir el alcance por separado en ambas sentencias case,
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
{
int i = 1; // No error
}
break;
}
Eric Lippert compartieron una muy buena link to his blog para explicar los alcances variables en la declaración de caso. Deberías echarle un vistazo.
No hay ninguna diferencia, excepto que las variables definidas en caso de que un sólo son visibles en ese bloque. –
Nada realmente.Es solo que a veces quieres crear y usar objetos que tengan un alcance para el caso. Sin corchetes, cualquier cosa que defina tiene un alcance más amplio. – Robinson
No es lo que pediste, pero encuentro que los bloques largos de 'case' son difíciles de leer. Si necesito un alcance o cualquier otra complejidad, se obtiene un nuevo método. –