switch multiple anidado c# switch-statement

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!