Frage

Sind C # Aufzählungen typsicher?

Wenn nicht, was sind die Folgen?

War es hilfreich?

Lösung

eine etwas andere Antwort geben ... während die Werte typsicher aus der Guss Perspektive sind, sind sie noch nicht aktiviert, wenn sie gegossen wurden - d. H

enum Foo { A = 1, B = 2, C = 3 }    
static void Main()
{
    Foo foo = (Foo)500; // works fine
    Console.WriteLine(foo); // also fine - shows 500
}

Aus diesem Grunde sollten Sie darauf achten, die Werte zu überprüfen - z. B. mit einem default in einem switch, die eine Ausnahme auslöst

können Sie auch prüfen, die (für Nicht-[Flags] Werte) über:

bool isValid = Enum.IsDefined(typeof(Foo), foo);

Andere Tipps

Ja, sie sind.

Hier finden Sie http://www.csharp-station.com/Tutorials /Lesson17.aspx

Aufzählungen sind Konstanten stark typisiert. Sie sind im Wesentlichen einzigartige Typen, die Sie symbolische Namen Integralwerte zuweisen lassen. In der C # Tradition, werden sie stark typisiert, was bedeutet, dass eine Enumeration eines Typs nicht implizit auf eine Enumeration eines anderen Typs zugeordnet werden kann, auch wenn der zugrunde liegende Wert ihrer Mitglieder gleich sind. In der gleichen Richtung, sind integrale Typen und Aufzählungen nicht implizit austauschbar. Alle Zuordnungen zwischen verschiedenen Aufzählungstypen und Integraltypen erfordern eine explizite Umwandlung.

Für die, was darauf hindeutet, Enum.IsDefined zu verwenden Argument Validierung zu tun ... nicht! Per Brad Abrams (aus dem Framework-Entwurf Guidlines-Update auf Enum Design ):

  

Es gibt wirklich zwei Probleme mit Enum.IsDefined (). Zuerst lädt es Reflexion und eine Reihe von Kaltatz Metadaten es ein täuschend teuren Anruf. Zweitens, wie die Note spielt auf gibt es eine Versionierung Problem hier.

Ja, sie sind .

  

Aufzählungen sind Konstanten stark typisiert.   Sie sind im Wesentlichen einzigartige Typen, die   können Sie einen symbolischen Namen zuzuordnen   Integralwert. In der C # Tradition,   sie bedeutet stark typisiert, dass   eine ENUM eines Typs kann nicht sein,   implizit zugewiesen Enum von   eine andere Art, auch wenn die   zugrunde liegende Wert ihrer Mitglieder   das Gleiche. Auf der gleichen Linie,   Integral-Typen und Aufzählungen sind nicht   implizit austauschbarer. Alle   Zuordnungen zwischen verschiedenen Enum   Typen und Integraltypen erfordern ein   explizite Umwandlung.

Ja.

C #: Enum-Typen:

-A typsichere Aufzählung der genannten Werte.

-Verhindert Programmierfehler

-User können zugrunde liegenden Typ steuern (Standard: int)

-Auch kann die zugrundeliegenden Werte steuern

Technisch nicht, weil Sie eine Enum als Grundwert darstellen können (int, long, etc). Wenn Sie jedoch sicher, dass Sie nur die ENUM durch seine bereitgestellt Namen verwenden, erhalten Sie Zeitfehler kompilieren, wenn Sie den Namen eines Aufzählungswert ändern, ohne seine Referenzen zu aktualisieren. In dieser Hinsicht ja ist es sicher geben.

Ich bin spät zur Party hier, aber ich wollte Extra ein wenig etwas werfen ... Ein Update auf den . NET Framework-Design-Richtlinien von Krzysztof Cwalina. Neben der hervorragenden Spitze oben auf der Prüfung einen gültigen Wert um sicherzustellen, dass auf Ihre Aufzählungen übergeben, stellt diese andere Hinweise und Ratschläge, wie sie effektiv zu nutzen, ein Bündel von gotchas (vor allem beteiligt Flags Aufzählungen) usw.

ja sie r stark typisierte safed u kann nicht es nicht impilcit convertion von Enum konstanten Variablen integeral Wert macht hv u 2 expilcitly dat tun z.B Enum Tage { Sonne, mon } int e = (int) days.sun; Console.WriteLine (e);

C # Aufzählungen Typ sichere Bedeutung sind

  1. Sie können von dem zugrunde liegenden Typ der tatsächlichen Enum nicht implizit konvertieren
  2. Sie können aber auch einen Wert von einer Enum in einer anderen Aufzählungs zuweisen, obwohl die zugrunde liegenden Typen der beiden Aufzählungen gleich sind. Eine explizite Umwandlung ist immer erforderlich.
  3. Aufzählungen machen Sie Ihren Code lesbarer und wartbar.

Ich habe accross ein exzellentes Video-Tutorial auf Aufzählungen kommen, um ihre Art sichere Art exaplaining. Hier finden Sie aktuelle hier und dort .

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