El tipo subyacente de su enumeración se sigue INT, sólo 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
can have any integral type as underlying type except char
, probablemente por alguna razón semántica. Esto no es posible:
TransactionTypeCode : char { Shipment = 'S', Receipt = 'R', }
para obtener el valor char
atrás, sólo puede utilizar un yeso.
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. Así que puede ser un poco mejor es
var value = Convert.ToChar((int)TransactionTypeCode.Shipment);
pero feo. Dada la relación rendimiento/legibilidad, prefiero la primera versión (moldeada).
En realidad es un poco más complejo, copié el código incorrecto de mi muestra, no puede haber cadenas para valores en una enumeración.entonces la respuesta completa sería ((char) instance.Shipment), ToString() –
@GeorgeMauer El "tipo subyacente" de su enumeración sigue siendo 'int', por lo que su definición realmente dice:' enum TransactionTypeCode {Shipment = 83, Receipt = 82,} '. Hay una conversión implícita de 'char' a' int', por alguna razón. El único "problema" (que podría no ser un problema) con su enumeración es que 'default (TransactionTypeCode)' no tiene un nombre, ya que ningún miembro es igual a 0 (o ''\ 0''). –
Esta respuesta es categóricamente incorrecta en todos los niveles. Comience con el hecho de que no se compilará, y continúe con el hecho de que las enumeraciones no son cadenas, que los caracteres no son cadenas, y que el tipo subyacente de la enumeración no es, y no puede ser, una cadena. . –