2015-01-02 18 views
16

Ho il seguente enumtipografico interruttore enum non funziona

enum EditMode { 
    View = 0, 
    Edit = 1, 
    Delete = 2 
} 

Supponiamo che io ho una variabile del tipo enum

var editMode = EditMode.Edit; 

Perché il codice seguente non funziona (va dritto al default) ?

switch (editMode) { 
    case EditMode.Delete: 
     ... 
     break; 
    case EditMode.Edit: 
     ... 
     break; 
    default: 
     ... 
     break; 
    } 
+1

Questo codice funziona nel dattiloscritto Playground. Sei sicuro che i tuoi script stiano caricando nell'ordine corretto? –

+0

Posso anche confermare che funziona nel parco giochi. –

+2

sì, sembra che il problema non sia il codice stesso. per qualche motivo il mio codice non assegna un numero dietro l'enumerazione ma la stringa associata al numero es. istanza di 1 (Modifica) "1". perché non riesco a capire. – Mantzas

risposta

9

ho trovato perché mi capita. da qualche parte nel codice c'è una funzione di attivazione (sto usando durandal) che passa questo enum come una stringa (la funzione ha il parametro contrassegnato come enum ma è ancora una stringa). questo è il motivo per cui la mia dichiarazione di switch fallisce. ho semplicemente convertito il valore in un numero e ora tutto funziona come previsto. grazie comunque

+1

Questo era il problema anche per me. Il mio costruttore aveva un parametro di tipo Enum, ma un chiamante esterno stava passando una stringa. Ho cambiato il parametro costruttore per essere di tipo stringa e ho usato EnumType [parametro] per convertirlo in enum. – mfanto

22

Ho anche avuto questo problema. modo semplice per ottenere intorno ad esso: aggiungere un segno + prima variabile nello switch, cioè

switch (+editMode) { 
    case EditMode.Delete: 
     ... 
     break; 
    case EditMode.Edit: 
     ... 
     break; 
    default: 
     ... 
     break; 
    } 
+1

Questo sembra l'unico modo per correggere il glitch/bug del dattiloscritto. – Kokodoko

+1

Quindi il + lo cambierà in un numero e sembra funzionare. Penso che questa non sia una grande soluzione. Ho anche provato ad assegnare il primo oggetto a 0 nel mio enum e non è stato d'aiuto. Sembra un insetto. – nycynik