Ce qui manque dans les autres réponses, c'est que les énumérations ont un type de base entier. Vous pouvez changer la valeur par défaut de int en tout autre type intégral sauf char comme:
enum LongEnum : long {
foo,
bar,
}
Vous pouvez effectuer un cast explicitement depuis et implicitement vers le type de base, ce qui est utile dans les instructions switch. Attention, on peut convertir n'importe quelle valeur du type de base en une énumération, même si l'énumération n'a pas de membre avec la valeur appropriée. Donc, utiliser toujours la section par défaut dans un commutateur est une bonne idée. BTW, .NET lui-même autorise même les énumérations à valeur en virgule flottante, mais vous ne pouvez pas les définir en C #, même si je pense que vous pouvez toujours les utiliser (sauf dans switch).
De plus, l'utilisation des énumérations vous donne plus de sécurité de type. Si vous avez l'intention d'utiliser par exemple des constantes int comme paramètres de méthode, alors je pourrais appeler la méthode avec n'importe quelle valeur int. Certes, via le casting, cela peut également arriver avec des énumérations, mais cela ne se produira pas accidentellement. Le pire est la possibilité de confondre l'ordre des paramètres.
void method(int a, int b) {...}
Si la constante A seulement peut aller dans a et la constante B seulement peut aller dans b, alors l'utilisation de deux types d'énumération différents découvrira tout abus lors de la compilation.