Domanda

Ho dichiarato la seguente enumerazione:

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

Come posso ottenere il valore "S" da TransactionTypeCode.Shipment o "R" da TransactionTypeCode.Receipt ?

Il semplice fatto di TransactionTypeCode.ToString() fornisce una stringa del nome Enum "Spedizione" o "Ricevuta" in modo da non tagliare la senape.

È stato utile?

Soluzione

Prova questo:

string value = (string)TransactionTypeCode.Shipment;

Altri suggerimenti

Devi controllare il tipo sottostante dell'enumerazione e quindi convertirlo in un tipo corretto:

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
    }    

Credo che Enum.GetValues() sia quello che stai cercando.

Il tipo sottostante della tua enumerazione è ancora int, solo che esiste una conversione implicita da char A int per qualche ragione.La tua enum è equivalente a

TransactionTypeCode { Shipment = 83, Receipt = 82, }

Nota anche questo enum può avere qualsiasi tipo integrale come tipo sottostante tranne char, probabilmente per qualche ragione semantica.Non è possibile:

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

Prendere il char valore indietro, puoi semplicemente usare un cast.

var value = (char)TransactionTypeCode.Shipment;

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

La seconda provoca boxe e quindi dovrebbe comportare un peggioramento.Quindi potrebbe essere leggermente migliore

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

ma brutto.Dato il compromesso prestazioni/leggibilità, preferisco la prima versione (cast).

Lo stavo cercando e ottengo la soluzione usa la classe Convert

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

guarda come è facile

Ecco come generalmente imposto le mie enumerazioni:

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());

i valori sottostanti dell'enumerazione devono essere numerici.Se il tipo di valori sottostanti è noto, un cast semplice restituisce il valore sottostante per una determinata istanza dell'enumerazione.

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

PRODUZIONE:Quanto:3

OR (più vicino alla domanda originale)

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.

Questa è una domanda ricorrente per me, dimentico sempre che un semplice cast ti dà il valore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top