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'?

Comment implémenter la logique dépendante du type en C # sans une fonctionnalité directe de type 'Switch on Type'?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-28 15:16:09181parcourir

How Can We Implement Type-Dependent Logic in C# Without a Direct

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn