Zunächst einmal hätten Sie das viel einfacher tun können:
MyConfusingEnum x1 = 0;
MyConfusingEnum x2 = default(MyConfusingEnum);
MyConfusingEnum x3 = new MyConfusingEnum();
MyConfusingEnum x4 = (MyConfusingEnum) 123;
Alle oben genannten funktionieren gut. (Sie werden überrascht sein, dass das erste funktioniert. Weitere Informationen finden Sie im Abschnitt mit den Spezifikationen für implizite Aufzählungskonvertierungen.)
Meine Frage ist, warum der Compiler eine leere Definition zulässt
Ich beantworte Ihre Frage zunächst mit einer Frage. Würden Sie auch den Compiler ablehnen lassen?
class C {}
interface I {}
struct S {}
Warum oder warum nicht?
Um Ihre Frage direkter nicht zu beantworten: "Warum ist die Welt nicht anders als sie ist?" Fragen sind schwer zu beantworten. Anstatt diese unmögliche Frage zu beantworten, beantworte ich die Frage: "Angenommen, beim Erstellen leerer Aufzählungen wurde dem Designteam ein Fehler gemeldet. Wie hätten Sie auf diese Frage reagiert?" Diese Frage ist immer noch kontrafaktisch, aber zumindest kann ich sie beantworten.
Es stellt sich dann die Frage, ob die Kosten des Features durch seine Vorteile gerechtfertigt sind .
Um zu funktionieren, muss ein Sprachfeature gedacht, entworfen, spezifiziert, implementiert, getestet, dokumentiert und an Kunden versendet werden. Dies ist eine Funktion "Fehler erzeugen", daher muss die Fehlermeldung geschrieben und in einige Dutzend Sprachen übersetzt werden, ebenso wie die Dokumentation. Die fünf Minuten, die ich für die Implementierung der Funktion benötigt hätte, bedeuten für viele Leute, die ziemlich viel bezahlt werden, viele Arbeitsstunden.
Dies sind jedoch nicht die relevanten Kosten. Die Opportunitätskosten sind die relevanten Kosten. Die Budgets sind begrenzt, Funktionen sind nicht kostenlos, und daher bedeutet jede implementierte Funktion, dass eine andere Funktion gekürzt werden muss. Welches Feature von C # möchten Sie geschnitten haben, um dieses Feature zu erhalten? Der verlorene Nutzen aus nicht in der Lage , eine bessere Funktion zu tun ist , die Opportunitätskosten .
Ich stelle auch fest, dass Ihre vorgeschlagene Funktion für niemanden einen offensichtlichen Nutzen hat , was es für das Designkomitee schwierig machen würde, sie zu verkaufen. Vielleicht gibt es einen überzeugenden Vorteil, den ich nicht sehe; wenn ja, was ist das?
Gibt es Szenarien, in denen dies nützlich sein könnte?
Niemand fällt mir ein. "Programme ablehnen, die offensichtlich nicht nützlich sind" ist kein Entwurfsziel von C #.