Domanda

Questa domanda è una specie di aggiunta a questa domanda

In C#, un caso switch non può passare ad altri casi, ciò causa un errore di compilazione.In questo caso sto semplicemente aggiungendo un numero al totale mensile per il mese selezionato e per ogni mese successivo.(semplice esempio, non vuole essere reale)

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;
}

Esiste un'alternativa logica a questo in C# senza dover scrivere un sacco di istruzioni if?

if (month <= 0)
   add something to month
if (month <= 1)
   add something to month
if (month <= 2)
   add something to month
.... etc
È stato utile?

Soluzione

Spesso, quando vedi il rumore di un'enorme istruzione switch o di molte istruzioni if ​​che potrebbero rientrare in più di un blocco, stai cercando di eliminare una progettazione errata.

E se invece implementassi il modello Specifica per vedere se qualcosa corrisponde e poi agisci di conseguenza?

foreach(MonthSpecification spec in this.MonthSpecifications)
{
   if(spec.IsSatisfiedBy(month))
       spec.Perform(month);
}

quindi puoi semplicemente aggiungere specifiche diverse che corrispondono a ciò che stai cercando di fare.

È difficile dire quale sia il tuo dominio, quindi il mio esempio potrebbe essere un po' forzato.

Altri suggerimenti

Nelle istruzioni switch C# è possibile ignorare i casi solo se non è presente alcuna istruzione per il caso che si desidera ignorare

switch(myVar)
{
   case 1:
   case 2: // Case 1 or 2 get here
      break;
}

Tuttavia se vuoi fallire con un'affermazione devi usare il temuto GOTO

switch(myVar)
    {
       case 1: // Case 1 statement
               goto case 2;
       case 2: // Case 1 or 2 get here
          break;
    }

Stai aggiungendo costanti?Se è così, forse qualcosa del genere funzionerebbe (sintassi C):

const int addToTotals[] = {123, 456, ..., 789};

for(i=month;i<12;i++)
   totals += addToTotals[i];

Puoi fare una cosa simile con puntatori a variabili o funzioni se hai bisogno di istruzioni più complesse rispetto all'aggiunta di costanti ai totali per ogni mese successivo.

-Adamo

C'è già una domanda che affronta questo argomento:

Limitazioni delle istruzioni switch C#: perché?

MODIFICARE:

Il mio scopo principale nel sottolinearlo, gentili bestie, è che due domande con nome quasi identico aggiungono confusione all'insieme delle domande.

Scrivi i casi degli interruttori in ordine inverso

case 2:

case 1:

case 0:

break;


default:

Spero che aiuti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top