Ma question est assez simple, mais je n'ai pas trouvé le moyen de mettre en œuvre mon code comme je le souhaite. J'ai donc commencé à me demander si le code que je veux implémenter n'est pas bon. Et si c'est le cas, quelle est la meilleure façon de le faire.Utiliser enum comme constante entière en C#
Ici, il 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();
}
}
Ce code ne compilera pas, donnant des erreurs de ce genre:
La méthode la plus surchargée de match pour 'InputManager.Add (ushort, Keys)' a quelques arguments non valides
argument '1': ne peut pas convertir 'RegisteredInput' à 'ushort'
Si j'utilise un jeter comme dans manager.Add((ushort)RegisteredInput.Up, Keys.Q);
ça va fonctionner. Mais parce que la distribution doit être explicite, je me demandais si ce code n'est pas recommandé en C# comme en C++ et s'il y a une meilleure façon de le faire (comme utiliser const ushort
pour chaque valeur, ce que je n'aime pas beaucoup).
La meilleure réponse que j'ai obtenue jusqu'ici était de this thread, mais ça ressemble tellement à un hack, je me suis inquiété.
Merci!
Pourquoi le dictionnaire n'est-il pas défini comme "Dictionary'? En outre, essayez d'éviter de retaper les messages d'erreur et le code dans les sites Web lorsque vous posez des questions sur les choses, la chance que vous faites quelque chose de mal, nous allons raccrocher sur est là. Comme ... le message d'exception nommait-il réellement la méthode "Addd" avec 3 d's? Comment pouvons-nous vous faire confiance pour réellement copier le code réel utilisé, et ne pas retaper quelque chose de simplifié qui a d'autres problèmes tout à fait? –
Parce que je ne veux pas de touches répétées. A propos du message d'erreur, je n'ai pas retapé, j'ai juste supprimé beaucoup d'espaces de noms non pertinents. J'ai également changé les vrais noms des méthodes, car ils ne sont pas en anglais. –
Je ne comprends pas ce que vous entendez par "touches répétées". Peux-tu élaborer? –