2011-10-04 26 views
7

tengo 2 enumeracionesC# - Convertir una enumeración a otro

public enum PersonTitle{ 
    Mr=0,Ms=1,Mrs=2 
} 

public enum SystemPersonTitles{ 
    Mr=0,Ms=1,Mrs=2 
} 

¿Cómo se convierte uno a otro (no hay casos de conversión o si las declaraciones).

public void SystemPersonTitles TellWhatYouAre(PersonTitle personTitle){ 
//here 
} 
//usage 
SystemPersonTitles systemPersonTitles = TellWhatYouAre(PersonTitle.Ms); 
+2

Los valores son los mismos, por lo que puede simplemente echarlo – harold

Respuesta

10
SystemPersonTitles newValue = (SystemPersonTitles)(int)PersonTitle.Mr; 

Fuera de la cabeza, no puedo probar esto ya que actualmente estoy en mi OSX.

+6

Esto funcionará, pero el molde interno es redundante –

0

Algo así como (SystemPersonTitles) (int) personTitle

8

enumeraciones son sólo números enteros glorificados, por lo que simplemente puede convertir de uno a otro:

public SystemPersonTitles TellWhatYouAre(PersonTitle personTitle) 
{ 
    return (SystemPersonTitles)personTitle; 
} 

Tenga en cuenta que esta conversión se basa en los valores int, no los nombres.

3

Colóquelo en un int y luego vuelva al otro Enum.

public void SystemPersonTitles TellWhatYouAre(PersonTitle personTitle){ 
    int value = (int)personTitle; 
    var systemPersonTitle = (SystemPersonTitles)value; 
} 

también se puede hacer directamente, ya que otros señalan, pero que quería ser explícito para mostrar la mecánica detrás de la solución.

SystemPersonTitles systemPersonTitle = (SystemPersonTitles)personTitle; 
3

Dado que ambos son básicamente un int, puede simplemente emitirlo.

Así que si usted tiene una instancia de PersonTitle llamada title, usted puede hacer esto:

SystemPersonTitles newTitle = (SystemPersonTitles)title; 
2

Si desea convertirlos en valor, puede utilizar esto:

(SystemPersonTitles)PersonTitle.Mr; 

Si desea convertirlos por su nombre, puede utilizar esto:

public bool TryConvertToSystemPersonTitles(
    PersonTitle personTitle, out SystemPersonTitles result) 
{ 
    return Enum.TryParse(personTitle.ToString(), out result); 
} 
+0

@dtb: Lo escribí de una manera, luego cambié a una manera diferente. : o Supongo que dejé el código extraviado –

1

Puede hacer esto:

PersonTitle person = PersonTitle.Mr; 

SystemPersonTitles system = (int) person; 

Esto hará la conversión según el valor int.

Si desea hacerlo por Nombre, hacer:

PersonTitle person = PersonTitle.Mr; 

SystemPersonTitles sys = (SystemPersonTitles)Enum.Parse(person.GetType(), person.ToString()); 
1

No hay forma directa de hacerlo, y es la manera correcta. Digamos que usted podría hacer:

personTitle = systemPersonTitle; 

¿Qué pasaría con su código si SystemPersonTitles van a cambiar a cualquiera de los que:

public enum SystemPersonTitles1{ 
    Mr=1,Ms=2,Mrs=3 
} 

public enum SystemPersonTitles2{ 
    Mr=0,Ms=1,Mrs=2,UnKnown=3 
} 

public enum SystemPersonTitles3{ 
    Mrs=0,Ms=1,Mr=2 
} 

o cualquier otro cambio que uno puede imaginar.
seguro que puede eludir esta limitación, pero es solo una mala programación. Si elige usar el valor "int" de ellos y pierde la capacidad de enumeración. solo usa "int" para comenzar ...