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
Libérer: 2024-12-30 17:24:11
original
149 Les gens l'ont consulté

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
}
Copier après la connexion

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;
}
Copier après la connexion

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
Copier après la connexion

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??)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal