Hey Leute, ich habe Probleme mit der "Ordnung" der Werte eines Enums. Es ist ein bisschen schwierig zu erklären, deshalb habe ich einen Code geschrieben:
%Vor%Die Ausgabe ist:
Aufzählung A: Zwei Zwei Zwei Vier
Aufzählung B: Drei Drei Drei Vier
Aufzählung C: Ein Ein Ein Vier
Meine Frage ist: WARUM !? Ich kann die Logik zur Ausgabe nicht finden. Die meiste Zeit gibt es eine gewisse Logik, und ich hoffe, ihr könnt etwas Licht in dieses Thema bringen.
Ich habe VS2010 / .Net 4.0 verwendet, um den Code zu kompilieren und auszuführen.
Das Verhalten wird als "nicht definiert" angegeben (ich dachte, ich hätte gerade ein Muster entdeckt, aber anscheinend nicht.) Die Dokumentation ruft dies explizit auf:
Wenn mehrere Aufzählungselemente denselben zugrunde liegenden Wert haben und Sie versuchen, die Zeichenfolgendarstellung des Namens eines Aufzählungsmembers basierend auf seinem zugrunde liegenden Wert abzurufen, sollte Ihr Code keine Annahmen darüber treffen, welchen Namen die Methode zurückgibt.
Entweder machen Sie Ihre Enum-Werte unterschiedlich oder erstellen explizit eine Map von Wert zu gewünschtem Namen.
Wenn Sie die IL dekompilieren, sollten Sie als erstes beobachten, dass die Aufrufe von WriteLine
alle sehr ähnlich aussehen:
Das heißt, das Laden dieser Aufzählungswerte lädt den Wert "1" dreimal und ruft dann WriteLine
auf. Daher sollten wir uns nicht wundern, dass die ersten 3 Aufrufe alle zum selben Wert führen.
Ich habe ein paar Experimente ausprobiert, kann aber nicht auf ein bestimmtes (undokumentiertes) Verhalten verweisen, auf das Sie sich verlassen können, um vorherzusagen, welcher Wert gedruckt wird.