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 }
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; }
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
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??)
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!