Come utilizzare efficientemente una dichiarazione switch con enum?

6

Vorrei sapere come posso utilizzare un'istruzione switch con valori enum per i seguenti scenari:

Sto facendo un piccolo programma per un sistema di prenotazione dei voli. Il programma è pensato per inserire alcuni dettagli sul passeggero. Il programma limita inoltre l'utente a scegliere destinazioni diverse dalle seguenti 3 destinazioni. Una volta scelta la destinazione, il numero di volo dovrebbe essere automaticamente assegnato. L'utente sceglierà una delle tre destinazioni e il programma assegnerà un numero di volo appropriato per il passeggero.

Il numero di volo verrà assegnato come segue:

     Destination                    Flight No.
      London                            201
      Frankfurt                         233
      Berlin                            241

Quindi diciamo che creo un enum di destinazioni, quindi come posso usare l'istruzione switch qui? Questo non è un compito a casa. Lo sto facendo solo per esplorare.

    
posta Maxood 24.12.2011 - 10:23
fonte

3 risposte

11

Lo scenario non sembra un uso appropriato per un'enumerazione. Inoltre, a meno che i valori non cambino mai, questo dovrebbe essere guidato dai dati.

Se i valori non cambiano mai, allora una coppia chiave-valore è più appropriata dove la destinazione è la chiave e il numero di volo è il valore. Ciò eliminerebbe ogni necessità di un'istruzione switch, in quanto la chiave può essere utilizzata per individuare il valore direttamente ed efficientemente.

se vuoi davvero usare un enum, allora l'istruzione switch in C # sarà qualcosa del tipo:

int flightNumber;
Destination selection = // some value collected from user input;

switch( selection )
{
    case Destination.London:
        flightNumber = 201;
    break;

    // etc.
}
    
risposta data 24.12.2011 - 10:31
fonte
6

Sono d'accordo con Tim Medora, non è una buona idea usare un enum in quel caso, perché ti obbliga ad avere hardcode le tue destinazioni e i tuoi numeri di volo.

Ciò che ti incoraggerei a fare è avere una possibile destinazione List<string> e una mappatura tra le destinazioni e il numero di volo, ad esempio Dictionnary<string,int> che generi dinamicamente all'inizio del programma in base al contenuto del database.

    
risposta data 24.12.2011 - 10:43
fonte
1

Questa è una tipica tabella hash, vero?

  1. Sarà molto più efficiente usare la tabella hash quando il numero di voci è grande, che nel tuo caso è molto probabile.
  2. È più semplice implementare le operazioni sul recupero, l'archiviazione e la modifica dei dati rispetto all'implementazione di enum-switch.
  3. È più facile mantenere il codice. Sarà orribile se ci sono decine di destinazioni definite nelle dichiarazioni enum e switch.
risposta data 24.12.2011 - 13:07
fonte

Leggi altre domande sui tag