C# - преобразование одного перечисления в другое
у меня есть 2 перечисления
public enum PersonTitle{
Mr=0,Ms=1,Mrs=2
}
public enum SystemPersonTitles{
Mr=0,Ms=1,Mrs=2
}
Как преобразовать один в другой (нет случаев переключения или операторов If).
public void SystemPersonTitles TellWhatYouAre(PersonTitle personTitle){
//here
}
//usage
SystemPersonTitles systemPersonTitles = TellWhatYouAre(PersonTitle.Ms);
8 ответов
SystemPersonTitles newValue = (SystemPersonTitles)(int)PersonTitle.Mr;
из головы, я не могу проверить это, как я в настоящее время на моем OSX.
перечисления - это просто прославленные целые числа, поэтому вы можете просто переходить от одного к другому:
public SystemPersonTitles TellWhatYouAre(PersonTitle personTitle)
{
return (SystemPersonTitles)personTitle;
}
обратите внимание, что это преобразование основано на значениях int, а не на именах.
поскольку оба они в основном являются int, вы можете просто бросить его.
Итак, если у вас есть экземпляр PersonTitle
под названием title
, вы можете сделать это:
SystemPersonTitles newTitle = (SystemPersonTitles)title;
бросьте его в int
а затем вернемся к другому перечислению.
public void SystemPersonTitles TellWhatYouAre(PersonTitle personTitle){
int value = (int)personTitle;
var systemPersonTitle = (SystemPersonTitles)value;
}
также можно сделать напрямую, как указывают другие, но Я хотел быть явным, чтобы показать механику решения.
SystemPersonTitles systemPersonTitle = (SystemPersonTitles)personTitle;
Если вы хотите преобразовать их по значению, вы можете использовать это:
(SystemPersonTitles)PersonTitle.Mr;
Если вы хотите, чтобы преобразовать их по имени, вы можете использовать это:
public bool TryConvertToSystemPersonTitles(
PersonTitle personTitle, out SystemPersonTitles result)
{
return Enum.TryParse(personTitle.ToString(), out result);
}
вы можете сделать это:
PersonTitle person = PersonTitle.Mr;
SystemPersonTitles system = (int) person;
это будет делать преобразование в соответствии со значением int.
Если вы хотите сделать это по имени, не так :
PersonTitle person = PersonTitle.Mr;
SystemPersonTitles sys = (SystemPersonTitles)Enum.Parse(person.GetType(), person.ToString());
нет прямого способа сделать это, и это правильный путь. Пусть говорят, что вы могли бы сделать:
personTitle = systemPersonTitle;
что произойдет с вашим кодом, если SystemPersonTitles изменится на любой из них:
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
}
или любое другое изменение, о котором можно подумать.
конечно, вы можете обойти это ограничение, но это просто плохое Программирование. Если вы решили использовать значение " int " из них и потерять способность перечисления. для начала просто используйте "int"...