Erstellen Sie eine Liste von Schlüssel-Wert-Paare mit dem Schlüssel = Enums Name und Value = Enums-Wert unter Verwendung der besten Technik
In C# 4.0 - 5.0 wie erstellen Sie eine Liste von Schlüssel-Wert-Paare, wobei der Schlüssel die enums-Namen-Wert, und der Wert des enums Namen Wert.
Auch in C# wie erstellen Sie eine Liste von Schlüssel-Wert-Paare, wobei der Schlüssel Enumerationen, name und Wert der Attribute EnumName Namen.
Will ich haben zwei separate Liste basiert auf die enum-Namen, um den Wert oder die lesbaren Namen aus der attribtue.
Beispiel:
public enum QATypes
{
[EnumMember(Value = "Black Box")]
BlackBox = 10,
[EnumMember(Value = "Integration Tests")]
IntegrationTests = 20,
[EnumMember(Value = "Acceptance Testing")]
AcceptanceTesting= 30,
...
}
und die erste Liste würde so Aussehen für die Werte:
{{ key:"BlackBox", value:10 }, { key:"IntegrationTests ", value:20 },{ key:"AcceptanceTesting", value:30 },...}
und in der zweiten Liste würde so Aussehen für enumsmember:
{{ key:"BlackBox", value:"Black Box"}, { key:"IntegrationTests ", value:"Integration Tests"},{ key:"AcceptanceTesting", value:"Acceptance Testing"},...}
- Könnten Sie erklären, warum genau müssen Sie es auf diese Weise? Und sollte nicht in der zweiten Liste der Schlüssel werden die enum-Wert selbst?
- Da in meinem Szenario die Felder-Namen in der Benutzeroberfläche varaiables wird immer bekannt sein, aber die Werte werden nicht immer bekannt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie mithilfe von Reflektion. Versuchen Sie dies (unter der Annahme, dass alle die enum-Mitglieder haben eine
EnumMemberAttribute
):Weiter auf, da deine Frage anscheinend JSON - verwandt, wenn Sie serialisieren möchten die Listen in das JSON-format, die Sie verwenden können Json.NET:
Ausgabe:
Und
Welche Ausgänge:
Einige Bemerkungen über die zurückgegebene Reihenfolge und Ausnahmebehandlung
Sich auf die Reihenfolge der Elemente zurückgegeben, die von der
GetEnumValues
undGetEnumNames
scheint nicht auf eine potenzielle Problem, da diese beiden Methoden basieren intern auf die gleiche Methode:und letztlich auf diese Methode:
Den code-snippet, das ich nicht gerade alle Ausnahmen, die es stützt sich auf die Beispieldaten in der ursprünglichen Frage. Zum Beispiel, es überprüft nicht das Vorhandensein der
EnumMemberAttribute
oder es istValue
Eigenschaft. Dies kann aber leicht geändert werden, mit ein wenig Aufwand.GetEnumValues
undGetEnumNames
, ist das irgendwo dokumentiert? Während die, die arbeiten könnten, und für immer, die Logik ist nicht sehr gesund. Das problem ist fürvaluesList
nur.Enum.GetValues
ist gefährlich, wenn Sie enum-Mitglieder mit gleichen Werten, aber verschiedenen Namen, wie:Sollten Sie verwenden
Enum.GetNames
und dann die entsprechenden Werte.Habe ich diese Helfer Klasse befassen sich mit ähnlichen Dingen:
Dies ist vollständig generisch, so dass Sie brauchen ein bisschen mehr Tippen, um anzurufen. Jetzt kann ich tun:
Können Sie erstellen Sie Ihre eigenen extension-Methode in einem geeigneten namespace, in dem Sie brauchen sich nicht über die enum-Attribut mit dem argument, nach Leichtigkeit ruft.
Außerdem können Sie die helper-Klasse nicht-statische, die Ihnen helfen mit Typ-Inferenz besser und damit aufrufende code kürzer. Sollte so Aussehen:
Für die erste Frage:
für die zweite Frage:
GetValues
ist nicht sehr gut für diese Sache imo, nicht, wenn Sie nicht habene { A, B = A , C }
,e.ToString()
gebenA
fürB
.