Mi pregunta es bastante simple, pero no encontré la manera de implementar mi código como quiero. Entonces comencé a preguntarme si el código que deseo implementar no es bueno. Y si lo es, ¿cuál es la mejor manera de hacerlo?Usar enum como constante entera en C#
Aquí 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();
}
}
Este código no se compilará, produce errores de este tipo:
El partido mejor método sobrecargado para 'InputManager.Add (ushort, Keys) tiene algunos argumentos no válidos
argumento '1': no se puede convertir de 'RegisteredInput' a 'ushort'
Si utilizo una lanzar como en manager.Add((ushort)RegisteredInput.Up, Keys.Q);
, funcionará. Pero debido a que el elenco debe ser explícito, me preguntaba si no es código recomendado en C# como en C++ y si hay una mejor manera de hacerlo (como usar const ushort
para cada valor, que no me gusta mucho)
La mejor respuesta que obtuve hasta ahora fue this thread, pero suena como un truco, me preocupaba.
Gracias!
¿Por qué el diccionario no se define como 'Dictionary'? Además, trate de evitar volver a escribir los mensajes de error y el código en los sitios web cuando pregunte por cosas, existe la posibilidad de que haga algo mal que nos colgará. Como ... ¿el mensaje de excepción realmente nombró el método "Addd" con 3 d's? ¿Cómo podemos confiar en que realmente copie el código real utilizado, y no vuelva a escribir algo simplificado que tenga otros problemas en total? –
Porque no quiero llaves repetidas. Sobre el mensaje de error, no volví a escribir, simplemente eliminé gran parte del espacio de nombres irrelevante. También cambié los nombres reales de los métodos, porque no están en inglés. –
No entiendo lo que quiere decir con "teclas repetidas". ¿Puedes elaborar? –