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
Libérer: 2025-01-28 15:16:09
original
240 Les gens l'ont consulté

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:

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
}
Copier après la connexion

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;
}
Copier après la connexion

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;
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal