c# - variable - Cómo obtener el valor subyacente de una enumeración
tipos de datos en c# visual studio (7)
Tengo la siguiente enumeración declarada:
public enum TransactionTypeCode { Shipment = ''S'', Receipt = ''R'' }
¿Cómo obtengo el valor ''S'' de un TransactionTypeCode.Shipment o ''R'' de TransactionTypeCode.Receipt?
Simplemente haciendo TransactionTypeCode.ToString () da una cadena del nombre de Enum "Envío" o "Recibo" para que no corte la mostaza.
Estaba buscando eso y obtengo la solución Use the Convert Class
int value = Convert.ToInt32(TransactionTypeCode.Shipment);
mira cómo es fácil
Creo que Enum.GetValues () es lo que estás buscando.
Prueba esto:
string value = (string)TransactionTypeCode.Shipment;
Debe verificar el tipo subyacente de la enumeración y luego convertir a un tipo apropiado:
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
}
Así es como generalmente configuro mis 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());
El tipo subyacente de su enumeración sigue siendo int, solo que hay una conversión implícita de char
a int
por alguna razón. Tu enum es equivalente a
TransactionTypeCode { Shipment = 83, Receipt = 82, }
También tenga en cuenta que enum
puede tener cualquier tipo integral como tipo subyacente, excepto char
, probablemente por alguna razón semántica. Esto no es posible:
TransactionTypeCode : char { Shipment = ''S'', Receipt = ''R'', }
Para recuperar el valor de char
, puedes usar un molde.
var value = (char)TransactionTypeCode.Shipment;
// or to make it more explicit:
var value = Convert.ToChar(TransactionTypeCode.Shipment);
El segundo causa el boxeo, y por lo tanto debería preformarse peor. Entonces puede ser un poco mejor
var value = Convert.ToChar((int)TransactionTypeCode.Shipment);
pero feo Dada la relación de rendimiento / legibilidad, prefiero la primera versión (de elenco).
los valores subyacentes de la enumeración deben ser numéricos. Si se conoce el tipo de valores subyacentes, un molde simple devuelve el valor subyacente para una instancia determinada 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 cerca de 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 una pregunta recurrente para mí, siempre me olvido de que un elenco simple te da el valor.