„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Ist Muster eine überlegene Alternative zu herkömmlichem typenbasiertem Umschalten in C#?

Ist Muster eine überlegene Alternative zu herkömmlichem typenbasiertem Umschalten in C#?

Gepostet am 2025-03-23
Durchsuche:253

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

Ist das Muster besser übereinstimmend als herkömmliches typenbasiertes Switching?

In Sprachen wie C#, die den direkten "Switch nach Typ" nicht unterstützen, verwenden Programmierer normalerweise den klassischen "wenn ... sonst ... sonst ... sonst" Struktur, um typenbasierte Switching zu simulieren. Mit zunehmender Anzahl der beteiligten Typen wird dieser Ansatz jedoch langwierig und zerbrechlich.

Muster, die in C# 7 und später

angepasst werden.

Beginnend mit C# 7 bietet das Muster -Matching eine elegantere und prägnantere Möglichkeit, nach Typ zu wechseln. Die "Falltyp" -Syntax ermöglicht die Übereinstimmung mit den Arten von Variablen und ersetzt die Anweisung "if" effektiv durch einen Fall eines bestimmten Musters.

Zum Beispiel:

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 verwenden nameof ()

In C# 6 können Sie den Namen von nameOf () verwenden, um den Typnamen dynamisch für Switch -Anweisungen zu erhalten. Obwohl es nicht so präzise wie das Musteranpassung ist, bietet es eine einfachere Alternative, um fest codierte Typnamen zu vermeiden.

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

Type-basierter Switch in C# 5 und früher

Für C# 5 und früher haben Sie keine andere Wahl, als die grundlegende "wenn ... sonst ... sonst" Struktur mit hartcodierten Typennamen zu verwenden. Dieser Ansatz kann ungeschickt und fehleranfällig werden.

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

abschließend

Muster-Matching in C# 7 und später liefert eine leistungsstarke und prägnante Möglichkeit, typenbasierte Switching zu simulieren. Es beseitigt die Notwendigkeit von bedingten Ketten, verbessert die Code -Lesbarkeit und verringert die Möglichkeit von Fehlern. Für frühere Versionen von C#lieferten die Verwendung von Namensof () und Switch-Anweisungen eine flexiblere Alternative als hartcodierte Typnamen, während die klassische "if ... sonst wenn ... sonst ... sonst" immer noch eine weniger ideale, aber immer noch praktikable Option ist.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3