Maison >développement back-end >C++ >Comment implémenter la logique dépendante du type en C # sans une fonctionnalité directe de type 'Switch on Type'?
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:
<code class="language-csharp">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 }</code>
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:
<code class="language-csharp">switch (o.GetType().Name) { case nameof(AType): // Handle AType break; case nameof(BType): // Handle BType break; }</code>
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:
<code class="language-csharp">switch (o.GetType().Name) { case "AType": // Handle AType break; }</code>
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!