Heim > Backend-Entwicklung > C++ > Können mehrere Enum-Werte in C# denselben zugrunde liegenden Wert haben?

Können mehrere Enum-Werte in C# denselben zugrunde liegenden Wert haben?

Patricia Arquette
Freigeben: 2024-12-30 17:24:11
Original
161 Leute haben es durchsucht

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

Enthüllung des Geheimnisses nicht eindeutiger Enum-Werte

Beim Versuch, Indexpositionen in einer EDI-Datei zu verschleiern, wurde eine überraschende Entdeckung gemacht: die Möglichkeit, derselben Enumeration mehrere Werte zuzuweisen. Dieses scheinbar ungewöhnliche Verhalten hat Fragen zur Logik dahinter und seinen möglichen Auswirkungen aufgeworfen.

Enums sind, wie sich herausstellt, im Wesentlichen Strukturen, die von System.Enum erben. Hinter den Kulissen werden Enum-Werte als Konstanten definiert. Beispielsweise entspricht die folgende Enumerationsdefinition:

public enum Color
{
    Red = 1,
    Blue = 1,
    Green = 1
}
Nach dem Login kopieren

im Wesentlichen dem folgenden Pseudocode:

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

Dies zeigt, dass es sich bei der Enumeration im Wesentlichen um eine Sammlung von Konstanten mit demselben Wert handelt zugrundeliegender Wert. Während es in C# verboten ist, eine Struktur mit einer expliziten Basisklasse zu definieren, ist dies genau das, was eine Enum-Definition bedeutet.

Daher gibt es keinen inhärenten Konflikt, wenn mehrere Konstanten mit demselben Wert in einer vorhanden sind Aufzählungstyp. Dies kann jedoch zu Unklarheiten bei der Konvertierung in die Enumeration führen. Zum Beispiel:

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

Der sowohl Farbe1 als auch Farbe2 zugewiesene Wert ist technisch gesehen nicht Rot, sondern 1. Beim Drucken erscheint er jedoch als Rot.

Zusätzlich wird eine nicht eindeutige Aufzählung verglichen Werte können zu rätselhaften Ergebnissen führen:

bool b = Color.Red == Color.Green; // True (Red is Green??)
Nach dem Login kopieren

Auch wenn der Vergleich logisch falsch erscheinen mag, ist er eine Folge der zugrunde liegenden Werte gleich.

Letztendlich ist die Verwendung nicht eindeutiger Enum-Werte eine Frage des Ermessens. Es ist wichtig, die Risiken und Vorteile sorgfältig abzuwägen, bevor dieser Ansatz angewendet wird.

Das obige ist der detaillierte Inhalt vonKönnen mehrere Enum-Werte in C# denselben zugrunde liegenden Wert haben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage