Maison >développement back-end >C++ >Pourquoi les énumérations C# peuvent-elles avoir des valeurs entières non uniques et quand dois-je éviter cela ?

Pourquoi les énumérations C# peuvent-elles avoir des valeurs entières non uniques et quand dois-je éviter cela ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-30 01:19:11543parcourir

Why Can C# Enums Have Non-Unique Integer Values, and When Should I Avoid This?

Valeurs d'énumération non uniques

Question :

Pourquoi C# autorise-t-il plusieurs valeurs d'énumération se voir attribuer la même valeur entière sous-jacente ? Est-il sûr d'utiliser des énumérations à cette fin, ou faut-il utiliser des structures à la place ?

Réponse :

Contrairement à la croyance populaire, une énumération en C# n'est pas spéciale tapez mais une structure qui dérive de System.Enum. Lorsque vous déclarez une énumération, le compilateur génère une structure avec des constantes nommées pour les valeurs de l'énumération.

Votre définition d'énumération :

public enum Color
{
    Red = 1,
    Blue = 1,
    Green = 1
}

Est traduite en :

public struct Color : System.Enum
{
    public const int Red = 1;
    public const int Blue = 1;
    public const int Green = 1;
}

Étant donné que les structures peuvent avoir plusieurs constantes avec la même valeur, il est possible de définir des énumérations avec des valeurs non uniques. Cependant, cela peut entraîner des incohérences lors de la conversion en énumérations :

Color color1 = (Color)1; // Returns Red
Color color2 = (Color)Enum.Parse(typeof(Color), "1"); // Also returns Red

La comparaison Color.Red == Color.Green sera également évaluée à true, ce qui peut prêter à confusion.

Bien qu'il est légal d'utiliser des énumérations avec des valeurs non uniques, il est recommandé de ne les utiliser que lorsque cela a du sens. Si vous avez besoin de valeurs uniques, envisagez d'utiliser une structure ou un dictionnaire à la place.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn