La mia domanda è piuttosto semplice, ma non ho trovato un modo per implementare il mio codice nel modo in cui lo voglio. Così ho iniziato a chiedermi se il codice che voglio implementare non è buono. E se lo è, qual è il modo migliore per farlo.Utilizzo di enum come costante intera in C#
Qui si va:
class InputManager
{
SortedDictionary<ushort,Keys> inputList = new SortedDictionary<ushort,Keys>();
public void Add(ushort id, Keys key) {...}
public bool IsPressed(ushort id) {...}
}
class Main
{
private enum RegisteredInput : ushort
{
Up,
Down,
Confirm
}
public Main()
{
InputManager manager = new InputManager();
manager.Add(RegisteredInput.Up, Keys.Q);
manager.Add(RegisteredInput.Down, Keys.A);
manager.Add(RegisteredInput.Confirm, Keys.Enter);
}
void update()
{
if(manager.IsPressed(RegisteredInput.Up)) action();
}
}
Questo codice non viene compilato, dà errori di questo genere:
Il metodo migliore partita overload per 'InputManager.Add (ushort, Keys)' ha alcuni argomenti non validi
argomento '1': impossibile convertire da 'RegisteredInput' a 'ushort'
Se io uso un cast come in manager.Add((ushort)RegisteredInput.Up, Keys.Q);
funzionerà. Ma poiché il cast deve essere esplicito, mi chiedevo se non fosse un codice consigliato in C# come in C++ e se c'è un modo migliore di farlo (come usare const ushort
per ogni valore, che non mi piace molto).
La risposta migliore che ho ottenuto finora è stata da this thread, ma suona molto simile a un trucco, mi sono preoccupato.
Grazie!
Perché il dizionario non è definito come 'Dictionary'? Inoltre, cerca di evitare di ridigitare i messaggi di errore e il codice nei siti web quando chiedi informazioni sulle cose, le possibilità che tu faccia qualcosa di sbagliato su cui verremo impiccati è lì. Come ... il messaggio di eccezione ha effettivamente chiamato il metodo "Addd" con 3 d's? Come possiamo fidarci di te per copiare effettivamente il codice effettivo usato e non ridigitare qualcosa di semplificato che ha altri problemi del tutto? –
Perché non voglio tasti ripetuti. Riguardo al messaggio di errore, non ho ridigitato, ho rimosso solo molto spazio dei nomi irrilevante. Ho anche cambiato i veri nomi dei metodi, perché non sono in inglese. –
Non capisco cosa intendi per "tasti ripetuti". Puoi elaborare? –