Frage

Ich habe die folgende Enumeration deklariert:

 public enum TransactionTypeCode { Shipment = 'S', Receipt = 'R' }

Wie erhalte ich den Wert „S“ von einem TransactionTypeCode.Shipment oder „R“ von TransactionTypeCode.Receipt?

Wenn Sie einfach TransactionTypeCode.ToString() ausführen, erhalten Sie eine Zeichenfolge mit dem Enum-Namen „Shipment“ oder „Receipt“, sodass es nicht zu kurz kommt.

War es hilfreich?

Lösung

Versuchen Sie folgendes:

string value = (string)TransactionTypeCode.Shipment;

Andere Tipps

Sie haben den zugrunde liegenden Typen der Aufzählung zu prüfen und dann zu einem richtigen Typ umwandeln:

public enum SuperTasks : int
    {
        Sleep = 5,
        Walk = 7,
        Run = 9
    }

    private void btnTestEnumWithReflection_Click(object sender, EventArgs e)
    {
        SuperTasks task = SuperTasks.Walk;
        Type underlyingType = Enum.GetUnderlyingType(task.GetType());
        object value = Convert.ChangeType(task, underlyingType); // x will be int
    }    

Ich glaube, Enum.GetValues() ist das, wonach Sie suchen.

Der zugrunde liegende Typ Ihres Enum ist noch int, nur, dass es eine implizite Konvertierung von char aus irgendeinem Grunde int. Ihre Enum ist äquivalent zu

TransactionTypeCode { Shipment = 83, Receipt = 82, }

Beachten Sie auch, dass enum jeden integralen Typen haben kann als zugrunde liegende Typ außer char , wahrscheinlich aus irgendeinem semantischen Grunde. Dies ist nicht möglich:

TransactionTypeCode : char { Shipment = 'S', Receipt = 'R', }

Um den char Wert zurück, können Sie nur eine Besetzung verwenden.

var value = (char)TransactionTypeCode.Shipment;

// or to make it more explicit:
var value = Convert.ToChar(TransactionTypeCode.Shipment);

Die zweite führt Boxen, und sollte daher schlechter Vorform. So kann etwas besser ist

var value = Convert.ToChar((int)TransactionTypeCode.Shipment);

aber hässlich. In Anbetracht Leistung / Lesbarkeit Kompromiss Ich ziehe die erste (cast) Version ..

Ich war für diese Suche und ich die Lösung erhalten Verwenden Sie die Convert-Klasse

int value = Convert.ToInt32(TransactionTypeCode.Shipment);

sehen, wie es einfach

Dies ist, wie ich in der Regel meine Aufzählungen ein:

public enum TransactionTypeCode {

  Shipment("S"),Receipt ("R");

  private final String val;

  TransactionTypeCode(String val){
    this.val = val;
  }

  public String getTypeCode(){
    return val;
  }
}

System.out.println(TransactionTypeCode.Shipment.getTypeCode());

die zugrunde liegenden Werte der Enumeration hat numerisch sein. Wenn die Art der zugrunde liegenden Werte bekannt ist, dann eine einfache Guss gibt den zugrunde liegenden Wert für eine bestimmte Instanz des Enum.

enum myEnum : byte {Some = 1, SomeMore, Alot, TooMuch};
myEnum HowMuch = myEnum.Alot;
Console.Writeline("How much: {0}", (byte)HowMuch);

OUTPUT: Wieviel: 3

OR (näher an der ursprünglichen Frage)

enum myFlags:int {None='N',Alittle='A',Some='S',Somemore='M',Alot='L'};
myFlags howMuch = myFlags.Some;
Console.WriteLine("How much: {0}", (char)howMuch);
//If you cast as int you get the ASCII value not the character.

Dies wird wiederkehrende Frage für mich, habe ich immer vergessen, dass ein einfacher Guss bekommt man den Wert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top