Dites que j'ai une fonction qui prend un entier comme argument. J'aimerais pouvoir utiliser une liste énumérée pour conserver les valeurs entières organisées.Passage des valeurs énumérées aux fonctions
Par exemple, je voudrais idéalement pouvoir définir ces (pseudo-code):
public enum days
{
monday,
tuesday,
etc...
}
public enum months
{
january,
february,
etc...
}
int doSomething(enum x)
{
return x + 1;
}
et être en mesure d'appeler la fonction en utilisant soit des listes énumérées comme suit:
int a = doSomething(days.monday);
int y = doSomething(months.february);
Cela évidemment ne fonctionnera pas comme-est parce que les besoins doSomething à définir en utilisant seulement l'un des énumérations (à savoir soit des jours ou des mois). Je connais quelques options. L'un est simplement jeté un int:
int a = doSomething((int)days.monday);
int y = doSomething((int)months.february);
Le seul problème est que cette fonction est appelée place beaucoup dans mon code, et il est maladroit de devoir continuer à mettre « (int) » s dans le place (l'une des principales motivations pour grouper ces valeurs int ensemble en enums est en premier lieu de rendre le code plus lisible).
Une autre option est d'éviter énumérations tout à fait, et regrouper plutôt les valeurs dans une classe de conteneur, quelque chose comme:
static class Days
{
static int x = 0;
static int monday = x++;
static int tuesday = x++;
}
Encore une fois, cela fonctionnera mais juste semble terriblement lourd quand j'ai beaucoup de ces conteneurs classes à définir.
La réponse pourrait très bien être qu'il n'y a pas de façon plus simple, et que je dois être un adulte et juste accepter une de ces options. Mais je pensais que j'obtiendrais un contrôle de santé avant de m'y engager. Y a-t-il une troisième option?
Wrt au System.DayOfWeek, les mois et les valeurs que je utilise jour ne sont que des exemples. Dans la vraie application, ils ne sont pas liés du tout à des jours ou des heures. Pour le code que vous avez montré, la fonction DoSomething() ne pourra fonctionner que sur l'énumération Days. Si j'essaie de fournir une énumération différente, cela échouera. – Gadzooks34
@ Gadzooks34: J'ai compris. Mais malheureusement, C# ne supporte pas encore la contrainte générique par enum. Voir ma mise à jour post pour la description. – abatishchev