Enums mit Zeichenfolgenwerten und Auffinden von enum nach Wert

7

Ich möchte eine ENUM haben wie die folgenden und dann ein Verfahren etwas wie Util.FindFruitByValue haben ( „A“), die den Aufzählungs von Apple zurück. Das liegt daran, dass die Abkürzungen in der Datenbank gespeichert sind und ich sie nach dem Lesen von db in entsprechende Enums konvertieren muss. ist das möglich ODER muss ich eine separate Klasse dafür erstellen? Lass es mich wissen, bitte. Danke im Voraus.

%Vor%

Update: Dies ist wie eine Nachschlagetabelle, aber der Unterschied ist der Wert ist String anstelle von einem int. Ich bevölkern ein Business-Objekt, indem Sie die Werte aus der Datenbank zu lesen, und ich möchte einen Typ mit festen Werten für die Objekt-Eigenschaft der Zeichenfolge stattdessen verwenden.

    
RKP 17.08.2010, 11:38
quelle

7 Antworten

19

Ich habe das Problem gelöst, indem ich das Attribut Beschreibung für die Enumeration verwendet habe. Die Lösung ist wie folgt. Ich verwende die Erweiterungsmethode, um die Beschreibung zu erhalten. der Code die Beschreibung zu erhalten, ist von diesem Link Ссылка genommen . Danke für deine Antworten.

%Vor%     
RKP 17.08.2010, 13:32
quelle
11

Sie können die Werte in ein Dictionary setzen, um sie effizient zu suchen:

%Vor%

Suche:

%Vor%

Wenn der Wert möglicherweise nicht vorhanden ist:

%Vor%     
Guffa 17.08.2010 11:55
quelle
2

Ich habe eine Bibliothek geschrieben, die genau dieses Problem behandelt. Es war ursprünglich nur das Gegenteil tun soll (Rückkehr einen String-Wert aus und Enum), aber sobald ich geschrieben hatte, dass eine Zeichenfolge zurück in seine Enum, in der Lage, nur ein kleiner Schritt war zu analysieren.

Die Bibliothek namens EnumStringValues ​​und ist von nuget in VS verfügbar (Paketseite wird auch hier: Ссылка ) Sourcecode ist auf GitHub hier: Ссылка

Gedanken und Kommentare sind willkommen. Inspiration kommt offensichtlich von dem gut publizierten Attribut-Ansatz, auf den in anderen Antworten hier verwiesen wird.

    
Brondahl 13.07.2014 10:28
quelle
1

Wie wäre es mit Hashtable?

    
rkellerm 17.08.2010 11:42
quelle
1

Entschuldigung, ich habe die Definition der Enumeration des OP übersehen. Offensichtlich müssen die Enum-Werte ein numerischer Typ sein, damit die OP-Definition nicht funktioniert.

Ein Gedanke, den ich hatte, war, den char-Wert als den Enum-Wert zu verwenden, z.

%Vor%

Wie Convert.ToInt32 ('A') - nicht sicher, was hier mit der Groß- / Kleinschreibung zu tun ist. Greifen Sie dann das richtige Ergebnis durch Gießen. Ich spiele immer noch mit einem Beispiel herum und freue mich, einige Vorschläge zu hören.

OK, Entschuldigung für die Verzögerung. Hier ist ein bisschen mehr dazu:

%Vor%

Verwendung:

%Vor%     
RobS 17.08.2010 11:42
quelle
0

Ich habe eine kleine DynamicEnum-Klasse erstellt, die es sehr einfach macht, Enums sowohl in Domain- als auch in Daten-Repositories hinein und heraus zu ziehen.

%Vor%

Hier ist die "Enum" -Klasse

%Vor%

Schließlich grundlegende Verwendung

%Vor%     
jejernig 12.11.2012 16:51
quelle
0

Ich weiß, es ist ein alter Post, aber ich hatte ein ähnliches Problem und ich fand gestern eine Lösung dafür.

Sie können das Typ safe enum pattern wie in diesem Post beschrieben verwenden:

Ссылка

    
neutron 15.01.2014 16:24
quelle

Tags und Links