multiple - Conmutador C#: el caso no se cae a la limitación de otros casos
switch case c++ (5)
Esta pregunta es una especie de complemento a esta pregunta
En C #, una caja de conmutación no puede pasar a otros casos, esto causa un error de compilación. En este caso, solo estoy agregando un número al total del mes para el mes seleccionado y luego cada mes subsiguiente. (ejemplo simple, no destinado a ser real)
switch (month)
{
case 0:
add something to month totals
case 1:
add something to month totals
case 2:
add something to month totals
default:
break;
}
¿Hay una alternativa lógica a esto en C # sin tener que escribir una tonelada de sentencias if?
if (month <= 0)
add something to month
if (month <= 1)
add something to month
if (month <= 2)
add something to month
.... etc
¿Estás agregando constantes? Si es así, tal vez funcionaría algo como esto (sintaxis C):
const int addToTotals[] = {123, 456, ..., 789};
for(i=month;i<12;i++)
totals += addToTotals[i];
Puede hacer algo similar con los punteros de función o variables si necesita declaraciones más complejas que agregar constantes a los totales para cada mes siguiente.
-Adán
A menudo, cuando ve el ruido de una gran declaración de cambio o muchas declaraciones si pueden caer en más de un bloque, está tratando de suprimir un mal diseño.
En cambio, ¿qué pasa si implementa el patrón de Especificación para ver si algo coincide, y luego actúa sobre él?
foreach(MonthSpecification spec in this.MonthSpecifications)
{
if(spec.IsSatisfiedBy(month))
spec.Perform(month);
}
entonces puedes agregar diferentes especificaciones que coincidan con lo que estás tratando de hacer.
Es difícil decir cuál es tu dominio, por lo que mi ejemplo podría ser un poco artificial.
En las sentencias de conmutación de C #, puede pasar por casos solo si no hay una declaración para el caso que desea evitar.
switch(myVar)
{
case 1:
case 2: // Case 1 or 2 get here
break;
}
Sin embargo, si quiere dejar de lado una afirmación, debe usar el temido GOTO
switch(myVar)
{
case 1: // Case 1 statement
goto case 2;
case 2: // Case 1 or 2 get here
break;
}
Escriba las cajas de los interruptores en orden inverso
case 2:
case 1:
case 0:
break;
default:
¡Espero que ayude!
Ya hay una pregunta que aborda este tema:
Limitaciones de la declaración de cambio de C #: ¿por qué?
EDITAR:
Mi propósito principal al señalar eso, gentlebeasts, es que dos preguntas de nombre casi idéntico agregan confusión al conjunto de preguntas.