au-delà des limites du type C # 'S' type '
C # ne prend pas directement en charge une instruction "Switch on Type". Cette limitation découle de l'ambiguïté inhérente dans les hiérarchies de type; Un objet pourrait potentiellement correspondre à plusieurs cas. Cependant, plusieurs solutions de contournement élégantes existent pour atteindre la logique dépendante du type.
Tiration de correspondance de motif (C # 7 et plus tard)
introduit en C # 7, la correspondance de motifs offre un moyen concis et lisible de gérer la logique basée sur le type dans les instructions switch
. Observez l'exemple:
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 }
Type de commutation basée sur le nom (C # 6 et plus tard)
C # 6 et les versions ultérieures fournissent l'opérateur nameof()
, permettant un commutateur en fonction du nom du type:
switch (o.GetType().Name) { case nameof(AType): // Handle AType break; case nameof(BType): // Handle BType break; }
Commutation basée sur des chaînes (C # 5 et plus tôt)
Pour les anciennes versions C # (5 et moins), un commutateur basé sur une chaîne utilisant le nom de type est nécessaire:
switch (o.GetType().Name) { case "AType": // Handle AType break; }
Bien que ces méthodes imitent efficacement le «type de type», elles peuvent ne pas toujours offrir le même niveau d'élégance ou de maintenabilité en tant que fonctionnalité de langage dédiée. Le choix dépend de la version C # et du niveau de clarté de code souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!