Heim >Backend-Entwicklung >C++ >Entspricht Muster eine überlegene Alternative zu herkömmlichem typenbasiertem Schalter in C#?

Entspricht Muster eine überlegene Alternative zu herkömmlichem typenbasiertem Schalter in C#?

Barbara Streisand
Barbara StreisandOriginal
2025-01-28 15:21:09581Durchsuche

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

Passt das Muster im C#besser als der herkömmliche Typ -Basis -Schalter?

In der Sprache, die "Wechsel nach Typ" in C#nicht unterstützt, verwenden Programmierer normalerweise klassisch "Wenn ... sonst ... sonst ... sonst", um den Typ -basierten Schalter zu simulieren. Mit zunehmender Anzahl von Typen wird diese Methode jedoch langwierig und zerbrechlich.

C# 7 und der höhere Versionsmodus überein

Ab C# 7 bietet das Muster -Matching eine elegantere und prägnantere Möglichkeit, nach Typ zu wechseln. Die Grammatik "Falltyp" ermöglicht den Typ der übereinstimmenden Variablen und ersetzt die Anweisung "If" in Fällen eines bestimmten Modus effektiv. zum Beispiel:

c# 6 verwenden nameof ()

In C# 6 können Sie das Namenssymbol nameOF () verwenden, um den Typnamen für die Switch -Anweisung dynamisch zu erhalten. Obwohl es nicht so einfach ist wie das Muster, bietet es eine einfachere Alternative zur Rekonstruktion, um Hard -Cooding -Typnamen zu vermeiden.
<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>

C# 5 und frühere Versionsbasis -Schalten

Für C# 5 und frühere Versionen haben Sie keine andere Wahl, als die Grundstruktur "Wenn ... sonst ... sonst" mit einem Hard -Coding -Typennamen zu verwenden. Diese Methode kann unangenehm und leicht zu Fehlern werden.

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

Schlussfolgerung

C# 7 und der höhere Versionsmodus -Matching bietet eine leistungsstarke und prägnante Methode für die Simulation -basierte Schaltung. Es beseitigt die Nachfrage nach der Zustandskette, verbessert die Lesbarkeit von Code und verringert die Möglichkeit von Fehlern. Für die frühen Versionen von C#lieferten die Verwendung von Namensof () und Switch -Anweisungen eine flexiblere Alternative als den Namen des Hartkodierungs -Typs, und der klassische "Wenn ... wenn ... wenn ... sonst" ist Struktur immer noch nicht ideal, aber immer noch machbare Entscheidungen .

Das obige ist der detaillierte Inhalt vonEntspricht Muster eine überlegene Alternative zu herkömmlichem typenbasiertem Schalter in C#?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn