Maison > développement back-end > C++ > Le motif correspond-il à une alternative supérieure à la commutation traditionnelle basée sur les types en C #?

Le motif correspond-il à une alternative supérieure à la commutation traditionnelle basée sur les types en C #?

Barbara Streisand
Libérer: 2025-01-28 15:21:09
original
542 Les gens l'ont consulté

Is Pattern Matching a Superior Alternative to Traditional Type-Based Switching in C#?

Le motif correspond-il dans le C # mieux que la commutation basée sur le type traditionnel?

Dans le langage qui ne prend pas en charge la "commutation par type" en C #, les programmeurs utilisent généralement la structure classique "si ... sinon si ... else" pour simuler la commutation basée sur le type. Cependant, à mesure que le nombre de types augmente, cette méthode deviendra longue et fragile.

C # 7 et le mode de version supérieure correspond à

De C # 7, la correspondance du modèle offre un moyen plus élégant et plus concis de basculer par type. La grammaire "Type de cas" permet le type de variables correspondantes et remplace efficacement l'instruction "IF" en cas de mode spécifique. par exemple:

C # 6 Utiliser NameOf ()

En C # 6, vous pouvez utiliser le symbole de calcul NameOf () pour obtenir dynamiquement le nom de type pour l'instruction Switch. Bien qu'il ne soit pas aussi simple que le motif, il fournit une alternative plus facile à reconstruction pour éviter les noms de types de codage dur.
<code class="language-csharp">void Foo(object o)
{
    switch (o)
    {
        case A a:    // 匹配A类型
            a.Hop();
            break;
        case B b:    // 匹配B类型
            b.Skip();
            break;
        default:
            throw new ArgumentException("意外类型: " + o.GetType());
    }
}</code>
Copier après la connexion

C # 5 et Version antérieure - Commutation basée sur la version

Pour les versions C # 5 et antérieures, vous n'avez pas d'autre choix que d'utiliser la structure de base "if ... else if ... else" avec un nom de type de codage dur. Cette méthode peut devenir maladroite et facile à faire des erreurs.

<code class="language-csharp">void Foo(object o)
{
    switch (o.GetType().Name)
    {
        case nameof(A):
            // 处理A类型
            break;
        case nameof(B):
            // 处理B类型
            break;
        default:
            // 处理其他类型
            break;
    }
}</code>
Copier après la connexion

Conclusion

C # 7 et la correspondance de mode de version supérieure fournit une méthode puissante et concise de commutation basée sur la simulation. Il élimine la demande de la chaîne de conditions, améliore la lisibilité du code et réduit la possibilité d'erreurs. Pour les premières versions de C #, en utilisant NameOf () et les instructions de commutation ont fourni une alternative plus flexible que le nom du type de codage dur, et la structure classique "si ... sinon si ... else" n'est toujours pas des choix idéaux mais toujours possibles .

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!

source:php.cn
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