Benutzerdefinierte Struktur / Typ, die mit switch () verwendet werden kann

8

Eines meiner Projekte hat einen Werttyp / struct, der eine benutzerdefinierte Bezeichnerzeichenfolge für ein Videoformat darstellt. In diesem Fall enthält es eine Zeichenfolge vom Inhaltstyp, die jedoch variieren kann.

Ich habe eine Struktur verwendet, so dass sie stark typisiert werden kann, wenn sie übergeben wird, und einige Plausibilitätsprüfungen für den anfänglichen Zeichenfolgenwert durchführen. Der tatsächliche Zeichenfolgenwert kann alles sein und wird von externen Plugins-Bibliotheken bereitgestellt, so dass ein numerischer enum nicht gilt.

%Vor%

Da es einige sehr verbreitete Formate gibt, habe ich diese als statische schreibgeschützte Felder mit Standardwerten herausgestellt.

%Vor%

Dies scheint in den meisten Fällen zu funktionieren, mit Ausnahme eines Schalterblocks, in dem angegeben wird, dass der Wert eine Konstante sein muss. Gibt es eine Möglichkeit, diesen Typ und die statischen Werte direkt in einem Schaltblock zu verwenden, ohne das interne Element oder die .ToString() override einzuschalten?

Gibt es eine bessere allgemeine Methode, dies zu tun, ohne eine Entwurfszeit enum mit numerischen Werten oder einfachen String-Konstanten zu verwenden?

    
Deanna 18.03.2013, 23:00
quelle

3 Antworten

11

UPDATE: Diese Antwort ist aufgrund neuer Regeln für Switch-Anweisungen in C # 7 nicht mehr ganz korrekt. Weitere Informationen finden Sie in der C # 7-Dokumentation.

  

Gibt es eine Möglichkeit, diesen Typ und die statischen Werte direkt in einem Schaltblock zu nutzen?

Nein. Der Steuerungstyp einer switch-Anweisung muss eine der folgenden sein: sbyte, byte, short, ushort, int, uint, long, ulong, char, bool, eine beliebige enum, die nullbaren Werttypen. oder Zeichenfolge. Und die in den Case-Labels verwendeten Konstanten müssen Kompilierzeitkonstanten sein, die mit dem Steuerungstyp kompatibel sind.

    
Eric Lippert 19.03.2013, 00:09
quelle
3

Eigentlich könnte es besser sein, den Code zu refactorieren, damit Sie switch statements überhaupt nicht verwenden müssen . Obwohl die Konstruktion selbst kein Anti-Pattern ist, ist es doch gängige Praxis, stattdessen Polymorphismus zu verwenden. Hier ist eine weitere Diskussion darüber, wie man switch .     

Alexander Tsvetkov 18.03.2013 23:08
quelle
1

Es scheint mir, dass all die möglichen Videoformate, mit denen Sie arbeiten, ein klassisches Beispiel für die Verwendung von Aufzählungen sein könnten. Ich sehe wirklich kein Problem, Ihre Aufzählung mit neuen Werten zu erweitern, wenn einige andere Formate hinzugefügt werden. Ja, die wichtige Sache, die wir sicherstellen müssen, dass irgendein VideoFormat , das im Programm benutzt wird, zur Aufzählung passen sollte. Aber möglicherweise wird es kein Nachteil sein.

    
Shymep 18.03.2013 23:45
quelle