Maison >développement back-end >C++ >Plusieurs valeurs Enum peuvent-elles partager la même valeur sous-jacente en C# ?

Plusieurs valeurs Enum peuvent-elles partager la même valeur sous-jacente en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-30 17:24:11161parcourir

Can Multiple Enum Values Share the Same Underlying Value in C#?

Dévoilement du mystère des valeurs d'énumération non uniques

En tentant de masquer les positions d'index dans un fichier EDI, une découverte surprenante a été faite : la possibilité d'attribuer plusieurs valeurs à la même énumération. Ce comportement apparemment inhabituel a soulevé des questions sur la logique qui le sous-tend et ses implications potentielles.

Il s'avère que les énumérations sont essentiellement des structures qui héritent de System.Enum. En coulisses, les valeurs d'énumération sont définies comme des constantes. Par exemple, la définition d'énumération suivante :

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

est effectivement équivalente au pseudo-code suivant :

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

Cela révèle que l'énumération est essentiellement une collection de constantes avec le même valeur sous-jacente. Alors qu'en C#, il est interdit de définir une structure avec une classe de base explicite, c'est précisément ce que signifie une définition d'énumération.

En conséquence, il n'y a pas de conflit inhérent au fait d'avoir plusieurs constantes avec la même valeur dans un type enum. Cependant, cela peut conduire à une ambiguïté lors de la conversion en énumération. Par exemple :

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

La valeur attribuée à la fois à color1 et à color2 n'est techniquement pas rouge mais 1. Pourtant, une fois imprimée, elle apparaît comme rouge.

De plus, en comparant l'énumération non unique les valeurs peuvent donner des résultats déroutants :

bool b = Color.Red == Color.Green; // True (Red is Green??)

Bien que la comparaison puisse sembler logiquement incorrecte, elle est une conséquence du fait que les valeurs sous-jacentes sont égal.

En fin de compte, l'utilisation de valeurs d'énumération non uniques est une question de jugement. Il est important de peser soigneusement les risques et les avantages avant d'utiliser cette approche.

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