Über die Einschränkungen von C#'s' Switch -Typ '
hinausc# unterstützt eine Anweisung "Schalttyp" nicht direkt. Diese Einschränkung ergibt sich aus der inhärenten Mehrdeutigkeit in Typhierarchien; Ein Objekt könnte möglicherweise mehrere Fälle übereinstimmen. Es gibt jedoch mehrere elegante Problemumgehungen, um typabhängige Logik zu erreichen.
Hebebau der Musteranpassung (C# 7 und später)
In C# 7 eingeführte Musteranpassung bietet eine kurze und lesbare Möglichkeit, typenbasierte Logik in switch
Anweisungen zu verarbeiten. Beobachten Sie das Beispiel:
switch (shape) { case Circle c: Console.WriteLine($"Circle with radius {c.Radius}"); break; case Rectangle s when (s.Length == s.Height): Console.WriteLine($"{s.Length} x {s.Height} square"); break; case Rectangle r: Console.WriteLine($"{r.Length} x {r.Height} rectangle"); break; // ... more cases }
Typ Name-basiertes Switching (C# 6 und später)
C# 6 und spätere Versionen geben dem nameof()
-Operator an, und aktiviert einen Schalter basierend auf dem Namen des Typs:
switch (o.GetType().Name) { case nameof(AType): // Handle AType break; case nameof(BType): // Handle BType break; }
String-basierte Schaltanlage (C# 5 und früher)
Für ältere C# -Versionen (5 und unten) ist ein String-basiertes Switch mit dem Typennamen erforderlich:
switch (o.GetType().Name) { case "AType": // Handle AType break; }
Während diese Methoden "Schalttyp" effektiv imitieren, bieten sie möglicherweise nicht immer das gleiche Maß an Eleganz oder Wartbarkeit wie eine dedizierte Sprachfunktion. Die Wahl hängt von der C# -Version und der gewünschten Code -Klarheit ab.
Das obige ist der detaillierte Inhalt vonWie können wir die Typ-abhängige Logik in C# ohne direkte Funktion 'Schalttyp' implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!