In Java ist es möglich, Methoden in einer Aufzählung zu haben.
Gibt es eine solche Möglichkeit in C # oder ist es nur eine String-Sammlung und das wars?
Ich habe versucht zu überschreiben, ToString()
aber es wird nicht kompiliert. Hat jemand ein einfaches Codebeispiel?
c#
enums
enumeration
Eya
quelle
quelle
Antworten:
Sie können Erweiterungsmethoden für Aufzählungstypen schreiben :
quelle
Sie können eine Erweiterungsmethode für Ihre Aufzählung schreiben:
Gewusst wie: Erstellen einer neuen Methode für eine Aufzählung (C # -Programmierhandbuch)
quelle
Eine weitere Option ist die Verwendung der von Jimmy Bogard erstellten Aufzählungsklasse .
Grundsätzlich müssen Sie eine Klasse erstellen, die von seiner erbt
Enumeration
. Beispiel:Dann können Sie es wie eine Aufzählung verwenden, mit der Möglichkeit, Methoden darin zu platzieren (unter anderem):
Sie können es mit NuGet herunterladen .
Obwohl diese Implementierung nicht in der Sprache muttersprachlich ist, kommt die Syntax (Konstruktion und Verwendung) Sprachen sehr nahe, die Enums nativ besser implementieren als C # ( z. B. Kotlin ).
quelle
Nee. Sie können eine Klasse erstellen und dann der Klasse eine Reihe von Eigenschaften hinzufügen, um eine Aufzählung etwas zu emulieren, aber das ist nicht wirklich dasselbe .
Ein besseres Muster wäre, Ihre Methoden in eine von Ihrem Emum getrennte Klasse einzuteilen.
quelle
Da ich auf das genaue Gegenteil von enum to string gestoßen bin, ist hier eine generische Lösung:
Dies ignoriert auch Groß- und Kleinschreibung und ist sehr praktisch, um REST-Response auf Ihre Enumeration zu analysieren, um mehr Typensicherheit zu erhalten. Hoffentlich hilft es jemandem
quelle
C # erlaubt keine Verwendung von Methoden in Enumeratoren, da es sich nicht um ein klassenbasiertes Prinzip handelt, sondern um ein zweidimensionales Array mit einer Zeichenfolge und einem Wert.
Die Verwendung von Klassen wird von Microsoft in diesem Fall dringend empfohlen. Verwenden Sie stattdessen (Daten-) Strukturen (ures). Der STRUCT ist als Light-Klasse für Daten und ihre Handler gedacht und kann Funktionen problemlos ausführen. C # und sein Compiler verfügen nicht über die Tracking- und Effizienzfunktionen, wie man sie von JAVA kennt. Je öfter eine bestimmte Klasse / Methode verwendet wird, desto schneller wird sie ausgeführt und ihre Verwendung wird "vorweggenommen". C # hat das einfach nicht. Verwenden Sie zur Unterscheidung STRUCT anstelle von CLASS.
quelle