Pregunta

Tengo el siguiente enumeración declaró:

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

¿Cómo puedo obtener el valor 'S' de un TransactionTypeCode.El envío o la 'R' de TransactionTypeCode.Recibo ?

Simplemente haciendo TransactionTypeCode.ToString() da una cadena de Enum nombre de "Envío" o "acuse de Recibo" para no cortar la mostaza.

¿Fue útil?

Solución

Intente esto:

string value = (string)TransactionTypeCode.Shipment;

Otros consejos

Usted tiene que comprobar el tipo subyacente de la enumeración y, a continuación, convertir a un tipo adecuado:

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
    }    

Creo Enum.GetValues() es lo que estás buscando.

El tipo subyacente de su enumeración es todavía de tipo int, solo que hay una conversión implícita de char a int por alguna razón.Su enumeración es equivalente a

TransactionTypeCode { Shipment = 83, Receipt = 82, }

También tenga en cuenta que enum puede tener cualquier tipo integral como subyacente tipo de excepción char, probablemente para algunos semántica de la razón.Esto no es posible:

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

Para obtener el char valor de nuevo, puedes usar un yeso.

var value = (char)TransactionTypeCode.Shipment;

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

La segunda causa de boxeo, y por lo tanto debe de preformas peor.Así que puede ser un poco mejor es

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

pero feo.Dado el rendimiento/legibilidad trade-off yo prefiero la primera (cast) versión..

Yo estaba Buscando Por Que y me da la Solución El uso de la Clase Convert

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

vea cómo es fácil

Esta es la forma en que generalmente configurar mi enumeraciones:

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

los valores subyacentes de la enumeración tiene que ser numérico.Si el tipo de los valores subyacentes son conocidos, entonces con un simple elenco devuelve el valor subyacente de una instancia concreta de la enumeración.

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

SALIDA:Cuánto:3

O (más cercano a la pregunta original)

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.

Esta es la pregunta recurrente para mí, que siempre hay que olvidar que un simple elenco que recibe el valor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top