c# -将一个枚举转换为另一个枚举
本文关键字:枚举 一个 转换 另一个 | 更新日期: 2023-09-27 18:10:26
我有两个枚举
public enum PersonTitle{
Mr=0,Ms=1,Mrs=2
}
public enum SystemPersonTitles{
Mr=0,Ms=1,Mrs=2
}
如何将一个转换为另一个(没有Switch case或If语句)。
public void SystemPersonTitles TellWhatYouAre(PersonTitle personTitle){
//here
}
//usage
SystemPersonTitles systemPersonTitles = TellWhatYouAre(PersonTitle.Ms);
SystemPersonTitles newValue = (SystemPersonTitles)(int)PersonTitle.Mr;
出了头,我不能测试这个,因为我目前在OSX上。
枚举只是经过美化的整数,因此您可以简单地从一个类型转换为另一个类型:
public SystemPersonTitles TellWhatYouAre(PersonTitle personTitle)
{
return (SystemPersonTitles)personTitle;
}
由于两者基本上都是整型,因此可以直接对其进行强制转换。
如果你有一个PersonTitle
的实例叫做title
,你可以这样做:
SystemPersonTitles newTitle = (SystemPersonTitles)title;
将其强制转换为int
,然后再返回到另一个Enum。
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值进行转换。
如果你想按Name来做,执行:
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"开头
类似于(SystemPersonTitles)(int)personTitle