Heim > Backend-Entwicklung > C++ > Können Aufzählungen in C# mehrere Werte mit derselben zugrunde liegenden Konstante enthalten, und was sind die Auswirkungen?

Können Aufzählungen in C# mehrere Werte mit derselben zugrunde liegenden Konstante enthalten, und was sind die Auswirkungen?

Susan Sarandon
Freigeben: 2025-01-03 02:12:37
Original
152 Leute haben es durchsucht

Can Enums in C# Hold Multiple Values with the Same Underlying Constant, and What are the Implications?

Mehrere Werte in Enum-Deklarationen: Ein tieferer Einblick in die CLR

Im Gegensatz zu Strukturen werden Enums als leichtgewichtige Werttypen kategorisiert, die eine Menge darstellen von benannten Konstanten. Die Frage stellt jedoch eine faszinierende Beobachtung dar, dass Aufzählungen scheinbar die Zuweisung mehrerer Werte zu derselben Konstante ermöglichen können.

Wenn man sich die Implementierungsdetails der Common Language Runtime (CLR) genauer ansieht, wird klar, dass Aufzählungen sind grundsätzlich Strukturen ähnlich. Hinter den Kulissen werden Enumerationen von der System.Enum-Basisklasse abgeleitet und sind im Wesentlichen Strukturen mit vordefinierten konstanten Werten.

Betrachten Sie die Beispiel-Enumerationsdeklaration:

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

CLR interpretiert diese Deklaration intern wie folgt :

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

Während C# die explizite Basisklassendeklaration für Strukturen verbietet, generiert die CLR dennoch diese Darstellung für Aufzählungen.

Das Vorhandensein mehrerer Konstanten mit demselben Wert in einem Aufzählungstyp stellt kein Problem dar. Diese nicht eindeutige Wertzuweisung kann jedoch zu unerwartetem Verhalten bei der Konvertierung in den Aufzählungstyp führen.

Zum Beispiel:

Color color1 = (Color)1;
Color color2 = (Color)Enum.Parse(typeof(Color), "1");
Nach dem Login kopieren

Sowohl Farbe1 als auch Farbe2 werden auf den Wert „Rot“ gesetzt, weil Die erste Wertzuweisung ist willkürlich. Technisch gesehen ist weder Farbe1 noch Farbe2 Rot zugewiesen; Stattdessen haben sie den Wert 1. Bei der Anzeige sehen Sie jedoch Rot.

Außerdem können Vergleichsoperationen zwischen nicht eindeutigen Enum-Werten zu überraschenden Ergebnissen führen:

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

Diese Gleichheit gilt, weil der zugrunde liegende numerische Wert für Rot und Grün 1 ist.

Obwohl dieses Verhalten nicht grundsätzlich problematisch ist, muss es bei der Anwendung berücksichtigt werden Aufzählungen mit nicht eindeutigen Werten. Es ist wichtig zu bestimmen, ob diese Nicht-Einzigartigkeit mit dem beabsichtigten Zweck und der Semantik Ihres Enum-Designs übereinstimmt.

Das obige ist der detaillierte Inhalt vonKönnen Aufzählungen in C# mehrere Werte mit derselben zugrunde liegenden Konstante enthalten, und was sind die Auswirkungen?. 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