Frage

Wenn int ist ein Synonym für die Int32 warum

enum MyEnum : Int32
{
    Value = 1
}

...nicht kompilieren?Wo, wie

enum MyEnum : int
{
    Value = 1
}

wird, obwohl wenn Sie den cursor über das int word zeigt struct System.Int32?

War es hilfreich?

Lösung

Der zugrunde liegende Typ ist ja die gleiche, aber der compiler hängt von der Art sein, wie die genaue alias.Dies ist eine Zusammenstellung Fehler basierend auf der Analyse.Ich warf einen Blick auf C# - Grammatik-Spezifikation und der zugrunde liegenden Typen definiert es als Token auf der Grundlage der alias (z.B.'int', 'unit'...etc.).Der parser erwartet, dass bestimmte Zeichenfolgen aus der integral-Typen Grammatik-Regel.

Der Fehler ist ein parsing-Fehler obwohl beide enum Enum : int bedeutet das gleiche wie enum Enum : Int32.

Ich weiß nicht, der Grund für den Zwang, diese Grenze zu analysieren Schritt, aber ich kann versuchen zu erraten:Seit Int32 ist kein Schlagwort, es könnte beziehen sich auf etwas, das andere die eigentliche int struct.Wenn der parser wissen, der Typ, um verschiedene AST für jeden sockel-Typ, dann kann Sie nicht abhängen, token, das ist kein Schlüsselwort.

Obwohl die C# - Spezifikation definiert die int Keywords explizite alias System.Int32, es ist immer noch ein problem, diese Informationen zu bekommen über die explizite Typ (Int32) während der Analyse Schritt, da es erfordert eine Menge von Kontext-Informationen, die nicht hergeleitet werden, die zu diesem Schritt.

Andere Tipps

Eine vertraute Neugier...die Sprache, spec Staaten (14.1):

Eine enum-Deklaration kann erklären ausdrücklich einen zugrunde liegenden Typ byte, sbyte, short, ushort, int, uint, long oder ulong.Beachten Sie, dass char können nicht verwendet werden als zugrunde liegenden Typ.Eine enum-Deklaration, die nicht explizit deklarieren, die einen zugrunde liegenden Typ hat einen zugrunde liegenden Typ von int.

Aber da int ist allgemein nur ein alias für System.Int32 es ist nicht unzumutbar zu denken, könnte die Arbeit...aber in der Tat ist es nicht.Es ist nicht im Allgemeinen ein großes problem, aber faszinierend, nicht weniger.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top