"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 #?

Publié le 2025-03-23
Parcourir:141

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

La correspondance des modèles est-elle meilleure que la commutation traditionnelle basée sur les types?

Dans des langages tels que C # qui ne prennent pas en charge "Switch by Type" direct, les programmeurs utilisent généralement la structure classique "si ... else if ... else" pour simuler la commutation basée sur le type. Cependant, à mesure que le nombre de types impliqués augmente, cette approche devient longue et fragile.

correspondant de modèle en C # 7 et plus tard

En commençant par C # 7, la correspondance du modèle offre un moyen plus élégant et concis de basculer par type. La syntaxe "Type de cas" permet de faire correspondre les types de variables, en remplacement efficace de l'instruction "IF" par un cas de motif spécifique.

Par exemple:

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());
    }
}

c # 6 Utilisation de nameof ()

Dans C # 6, vous pouvez utiliser l'opérateur NameOf () pour obtenir le nom de type dynamiquement pour les instructions de commutation. Bien qu'il ne soit pas aussi concis que la correspondance de motifs, il fournit une alternative plus facile pour éviter les noms de type codés durs.

void Foo(object o)
{
    switch (o.GetType().Name)
    {
        case nameof(A):
            // 处理A类型
            break;
        case nameof(B):
            // 处理B类型
            break;
        default:
            // 处理其他类型
            break;
    }
}

commutateur basé sur des types en C # 5 et plus tôt

Pour C # 5 et plus tôt, vous n'avez pas d'autre choix que d'utiliser la structure de base "if ... else if ... else" avec des noms de type codés dur. Cette approche peut devenir maladroite et sujet aux erreurs.

void Foo(object o)
{
    if (o is A)
    {
        // 处理A类型
    }
    else if (o is B)
    {
        // 处理B类型
    }
    else
    {
        // 处理其他类型
    }
}

en conclusion

La correspondance du modèle en C # 7 et fournit plus tard un moyen puissant et concis de simuler la commutation basée sur le type. Il élimine le besoin de chaînes conditionnelles, améliore la lisibilité du code et réduit la possibilité d'erreurs. Pour les versions antérieures de C #, l'utilisation des instructions NameOf () et Switch a fourni une alternative plus flexible que les noms de type codé dur, tandis que la structure classique "si ... sinon si ... else" est toujours une option moins idéale mais toujours viable.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3