uso tipos switch programas multiple instruccion ejemplos ejemplo consola con c# .net switch-statement

tipos - switch en c# consola



¿Cuál es la diferencia y por qué Switch Case funciona así en C#? (2)

Básicamente, la declaración de variables es efectivamente más amplia de lo que piensas; el segundo ejemplo adolece de "asignación definida", ya que se declara (más amplio), pero no se asigna realmente, por lo que ++ no tiene sentido en un valor no asignado.

Si quieres ámbitos por case , puedes hacerlo ... solo agrega llaves:

switch (x) { case 1: { uint cId = (uint)3; break; } case 2: { uint cId = (uint)5; break; } }

¿Es un poco molesto? Sí. ¿Es anti-intuitivo? Sí. ¿Alguna vez será cambiado? Es poco probable, ya que sería un cambio importante que impediría la compilación de muchos de los C # existentes.

Esta pregunta ya tiene una respuesta aquí:

Tengo dos funciones, una puede ser compilada y la otra no. ¿Cuál es la diferencia?

¿La función número 1 supone que el caso 1 siempre será afectado, o solo es un problema del compilador?

public void Test(int x) { switch (x) { case 1: uint cId = (uint)3; break; case 2: cId = (uint)5; //NO ERROR HERE. WHY? break; } } public void DeclaringInsideSwitch(int x) { uint tst = 0; switch (x) { case 1: int y = 3; uint variable = tst; break; case 2: variable++; //ERROR HERE. WHY? break; } }

Intenté, por supuesto, buscar "Declarar variables dentro del conmutador en C #", pero a mi me parece un error en C # ahora, conservado para compatibilidad con versiones anteriores.

// Después de recibir una advertencia de que ya fue respondida, mi pregunta ahora puede reducirse a lo que realmente se trata.

Por qué:

int x; x++;

no funciona esto?


Bueno, uint cId se define dentro del alcance {...} que está en su switch scope caso

switch (x) { case 1: uint cId = (uint)3; // <- definition break; case 2: // cId has been defined and thus can be assigned (initialization) cId = (uint)5; //NO ERROR HERE WHY? break; } // <- end of cId scope

En el segundo caso variable se define la variable , pero al ser una variable local se debe inicializar antes de su uso (incremento):

switch (x) { case 1: int y = 3; uint variable = tst; // <- definition break; case 2: // variable defined, but has not been initialized ("case 1:" hasn''t been run), // variable contains trash and so you can''t increment it variable++; //ERROR HERE WHY? break; } // <- end of variable scope