Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Warum kann ich Enum kein Int zuweisen?
getit
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

Warum kann ich Enum kein Int zuweisen?

beantworten | zitieren | melden


using System;
 
class Test {
 
  enum Weekday {
    Sonntag,
    Montag,
    Dienstag
  }
 
  static void Main(string[] args) {
    Weekday myDay0 = 0; //1
    Weekday myDay1 = 1; //2
  }
}

Warum funktioniert der Code (welcher mit 1 markiert ist) und der Code welcher mit 2 markiert ist nicht?

Nachdem der Code (Makierung 2) hinzugefügt wurde, lässt sich der Code nicht mehr kompilieren. Fehlermeldung:
test.cs(11,22): error CS0266: Der Typ 'int' kann nicht implizit in 'Test.Weekday' konvertiert werden. Es ist bereits
eine Implizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2126

beantworten | zitieren | melden

Da du die Variablen nicht als Zahl deklariert hast sondern als Weekday, will der Compiler dafür auch ein Element der Aufzählung haben.
Du könntest das casten als (Weekday)1, dann geht das. Aber dann nimmst du dir den Vorteil, sofort sehen zu können welches Aufzählungselement das ist.
Soweit dazu warum die 1 nicht ohne ausdrücklichen Cast akzeptiert wird.

Warum die 0 dann doch funktioniert, könnte daran liegen dass eine solche Variable mit einer 0 vorbelegt wird wenn du nichts anderes angibst. Daher könnte es sein dass der Compiler erkennt, da passiert ja nichts was ohne diese Zeile nicht auch passieren würde, und er deswegen die Zuweisung hinnimmt.
private Nachricht | Beiträge des Benutzers
getit
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

Danke für die Erklärung.
private Nachricht | Beiträge des Benutzers
Jompikumpi
myCSharp.de - Member



Dabei seit:
Beiträge: 14

beantworten | zitieren | melden

Das Verhalten im obigen Code ist ein Bug, eigentlich sollte auch die Zuweisung von „0“ nicht funktionieren.

Siehe why-can-i-assign-0-0-to-enumeration-values-but-not-1-0
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Jompikumpi am .
private Nachricht | Beiträge des Benutzers
getit
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

Danke, dass du nachgeforscht hast.
private Nachricht | Beiträge des Benutzers
dannoe
myCSharp.de - Member



Dabei seit:
Beiträge: 174

beantworten | zitieren | melden

Zitat von Jompikumpi
Das Verhalten im obigen Code ist ein Bug, eigentlich sollte auch die Zuweisung von „0“ nicht funktionieren.

Siehe why-can-i-assign-0-0-to-enumeration-values-but-not-1-0

Wenn man den Beitrag auf Stackoverflow richtig liest, dann steht dort, dass die Zuweisung von 0 zu einem Enum laut C# Spezifikation erlaubt ist. Nur die Zuweisung von 0.0 (0.0m und 0.0f) ist ein Bug und sollte nicht erlaubt sein. Der von getit gepostete Code enthält also keinen Bug, sondern die C# Spezfikation schreibt es so vor.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15832
Herkunft: BW

beantworten | zitieren | melden

Zitat von dannoe
dass die Zuweisung von 0 zu einem Enum laut C# Spezifikation erlaubt ist.
Absolut korrekt.
Besonderes Augenmerkt sollte man hier auf den Beitrag von Eric Lippert (damals beim Lagnuage Design von C# bei Microsoft gewesen, heute bei Facebook), in dem er beschreibt, wieso das so ist - und dass er dafür verantwortlich war/ist.
Der historische Grund, wieso man 0 erlaubt hatte, war meines Wissens die damalige Grundbasis von C.
private Nachricht | Beiträge des Benutzers