Ich versuche, ein Enum
gültiges Trennzeichen zu definieren und hinzuzufügen, das in CSV- oder ähnlichen Dateien verwendet wird. Dann werde ich es an eine ComboBox
als Datenquelle binden, sodass ich beim Hinzufügen oder Entfernen aus der Enum-Definition nichts im Kombinationsfeld ändern muss.
Das Problem ist, wie ich eine Aufzählung mit Zeichenfolgendarstellung definieren kann, etwa:
public enum SeparatorChars{Comma = ",", Tab = "\t", Space = " "}
Antworten:
Sie können nicht - Aufzählungswerte müssen ganzzahlige Werte sein. Sie können entweder Attribute verwenden, um jedem Aufzählungswert einen Zeichenfolgenwert zuzuordnen, oder in diesem Fall, wenn jedes Trennzeichen ein einzelnes Zeichen ist, können Sie einfach den
char
Wert verwenden:(BEARBEITEN: Zur Verdeutlichung können Sie
char
den zugrunde liegenden Typ der Aufzählung nicht erstellen, aber Sie könnenchar
Konstanten verwenden, um den Integralwert zuzuweisen, der jedem Aufzählungswert entspricht. Der zugrunde liegende Typ der obigen Aufzählung istint
.)Dann eine Erweiterungsmethode, falls Sie eine benötigen:
quelle
Soweit ich weiß, dürfen Sie enum keine Zeichenfolgenwerte zuweisen. Sie können eine Klasse mit Zeichenfolgenkonstanten erstellen.
quelle
separator
es sich nun um eine Zeichenfolge (könnte alles sein) anstelle einesSeparator
Typs mit eingeschränkten gültigen Werten handelt.Sie können es erreichen, benötigen aber ein wenig Arbeit.
Siehe: Aufzählung mit Zeichenfolgenwerten in C #
quelle
Für eine einfache Aufzählung von Zeichenfolgenwerten (oder einem anderen Typ):
Verwendung:
string MyValue = MyEnumClass.MyValue1;
quelle
Sie können dies nicht mit Aufzählungen tun, aber Sie können es so machen:
quelle
comboBox.DataSource = Enum.GetValues(typeof(myEnum));
in diesem Fall das Äquivalent sein wird?switch-case
Blöcken verwendet werden kann. Die Felder solltenconst
in Ordnung sein. Aber es kann immer noch nicht geholfen werden, wenn Sie wollenEnum.GetValues(typeof(myEnum))
.const
anstelle von verwendenstatic
. Konstanten sind sowohl schreibgeschützt als auch statisch und können in Konstruktoren nicht zugewiesen werden (es sei denn, es handelt sich um schreibgeschützte Felder).Sie können nicht, weil enum nur auf einem primitiven numerischen Typ basieren kann. Sie könnten
Dictionary
stattdessen versuchen, a zu verwenden:Alternativ können Sie ein verwenden
Dictionary<Separator, char>
oderDictionary<Separator, string>
woSeparator
ein normaler Enum:Das wäre etwas angenehmer, als die Saiten direkt zu handhaben.
quelle
Eine Klasse, die das Enum-Verhalten emuliert, aber
string
anstelle von verwendet,int
kann wie folgt erstellt werden ...Verwendung...
dann...
quelle
GrainType myGrain = "GT_CORN"
zum Beispiel nicht können.Es ist etwas spät für eine Antwort, aber vielleicht hilft es jemandem in Zukunft. Ich fand es einfacher, struct für diese Art von Problem zu verwenden.
Das folgende Beispiel kopiert einen eingefügten Teil aus dem MS-Code:
quelle
Für Leute, die hier ankommen und nach einer Antwort auf eine allgemeinere Frage suchen, können Sie das statische Klassenkonzept erweitern, wenn Ihr Code wie ein Code aussehen soll
enum
.Der folgende Ansatz funktioniert, wenn Sie das
enum names
gewünschte nicht fertiggestellt haben undenum values
diestring
Darstellung desenam name
; Verwendennameof()
Sie diese Option, um das Refactoring zu vereinfachen.Dadurch wird die Absicht einer Aufzählung mit Zeichenfolgenwerten (z. B. dem folgenden Pseudocode) erreicht:
quelle
Vielleicht ist es zu spät, aber hier geht es.
Wir können das Attribut EnumMember verwenden, um Enum-Werte zu verwalten.
Auf diese Weise ist der Ergebniswert für EUnitOfMeasure KM oder MI. Dies ist auch in der Antwort von Andrew Whitaker zu sehen .
quelle
Ich habe eine Basisklasse zum Erstellen von Aufzählungen mit Zeichenfolgen in .NET erstellt. Es ist nur eine C # -Datei, die Sie kopieren und in Ihre Projekte einfügen oder über das NuGet-Paket StringEnum installieren können .
Verwendung:
Eigenschaften
<completitionlist>
. (Funktioniert sowohl in C # als auch in VB): dhInstallation
Entweder:
.Net Standard 1.0
dass es auf.Net Core
> = 1.0,.Net Framework
> = 4.5,Mono
> = 4.6 usw. ausgeführt wird.Newtonsoft.Json
Kopieren Sie zur Unterstützung der Serialisierung stattdessen diese erweiterte Version. StringEnum.csIch erkannte nach der Tatsache, dass dieser Code Bens Antwort ähnlich ist. Ich habe es aufrichtig von Grund auf neu geschrieben. Ich denke jedoch, dass es einige Extras hat, wie den
<completitionlist>
Hack, die resultierende Klasse sieht eher aus wie eine Aufzählung, keine Verwendung von Reflexion über Parse (), das NuGet-Paket und Repo, wo ich hoffentlich eingehende Probleme und Feedback ansprechen werde.quelle
Aufbauend auf einigen der Antworten hier habe ich eine wiederverwendbare Basisklasse implementiert, die das Verhalten einer Aufzählung nachahmt, jedoch
string
als zugrunde liegenden Typ. Es unterstützt verschiedene Operationen, einschließlich:.Equals
,==
und!=
Dies ist die Basisklasse in ihrer Gesamtheit:
Und so würden Sie Ihre "String-Aufzählung" implementieren:
Welches könnte so verwendet werden:
Ich hoffe jemand findet das nützlich!
quelle
Nun, zuerst versuchen Sie, Zeichenfolgen und keine Zeichen zuzuweisen, auch wenn es sich nur um ein Zeichen handelt. Verwenden Sie ',' anstelle von ",". Als nächstes nehmen Aufzählungen nur ganzzahlige Typen an, ohne dass
char
Sie den Unicode-Wert verwenden könnten, aber ich würde Ihnen dringend raten, dies nicht zu tun. Wenn Sie sicher sind, dass diese Werte in verschiedenen Kulturen und Sprachen gleich bleiben, würde ich eine statische Klasse mit const-Zeichenfolgen verwenden.quelle
Während es wirklich nicht möglich ist, ein
char
oder einstring
als Basis für eine Aufzählung zu verwenden, denke ich, dass dies nicht das ist, was Sie wirklich gerne tun.Wie Sie bereits erwähnt haben, möchten Sie eine Reihe von Möglichkeiten haben und eine Zeichenfolgendarstellung davon in einem Kombinationsfeld anzeigen. Wenn der Benutzer eine dieser Zeichenfolgendarstellungen auswählt, möchten Sie die entsprechende Aufzählung erhalten. Und das ist möglich:
Zuerst müssen wir einen String mit einem Enum-Wert verknüpfen. Dies kann durch die durchgeführt werden ,
DescriptionAttribute
wie es beschrieben wird hier oder hier .Jetzt müssen Sie eine Liste mit Aufzählungswerten und entsprechenden Beschreibungen erstellen. Dies kann mit der folgenden Methode erfolgen:
Jetzt haben Sie eine Liste der Schlüsselwertpaare aller Aufzählungen und deren Beschreibung. Weisen wir dies einfach als Datenquelle für ein Kombinationsfeld zu.
Der Benutzer sieht alle Zeichenfolgendarstellungen der Aufzählung und in Ihrem Code erhalten Sie den gewünschten Aufzählungswert.
quelle
Wir können die Aufzählung nicht als Zeichenfolgentyp definieren. Die genehmigten Typen für eine Aufzählung sind Byte, Sbyte, Kurz, Ushort, Int, Uint, Long oder Ulong.
Wenn Sie weitere Informationen zur Aufzählung benötigen, folgen Sie bitte dem folgenden Link. Dieser Link hilft Ihnen, die Aufzählung zu verstehen. Aufzählung
@ narendras1414
quelle
Für mich geht das..
quelle
Was ich kürzlich begonnen habe, ist die Verwendung von Tupeln
quelle
quelle