我有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);
答案 0 :(得分:11)
SystemPersonTitles newValue = (SystemPersonTitles)(int)PersonTitle.Mr;
从头开始,我无法测试这个,因为我目前正在使用我的OSX。
答案 1 :(得分:8)
枚举只是美化整数,所以你可以简单地从一个转换到另一个:
public SystemPersonTitles TellWhatYouAre(PersonTitle personTitle)
{
return (SystemPersonTitles)personTitle;
}
请注意,此转换基于int值,而不是名称。
答案 2 :(得分:3)
将其投射到int
,然后再投回到另一个枚举。
public void SystemPersonTitles TellWhatYouAre(PersonTitle personTitle){
int value = (int)personTitle;
var systemPersonTitle = (SystemPersonTitles)value;
}
也可以像其他人指出的那样直接完成,但是我想明确地展示解决方案背后的机制。
SystemPersonTitles systemPersonTitle = (SystemPersonTitles)personTitle;
答案 3 :(得分:3)
由于两者基本上都是一个int,你可以直接转换它。
因此,如果您的PersonTitle
实例名为title
,则可以执行以下操作:
SystemPersonTitles newTitle = (SystemPersonTitles)title;
答案 4 :(得分:2)
如果您想按值转换它们,可以使用:
(SystemPersonTitles)PersonTitle.Mr;
如果您想按名称转换它们,可以使用:
public bool TryConvertToSystemPersonTitles(
PersonTitle personTitle, out SystemPersonTitles result)
{
return Enum.TryParse(personTitle.ToString(), out result);
}
答案 5 :(得分:1)
你可以这样做:
PersonTitle person = PersonTitle.Mr;
SystemPersonTitles system = (int) person;
这将根据int值进行转换。
如果您想按名称进行,请执行:
PersonTitle person = PersonTitle.Mr;
SystemPersonTitles sys = (SystemPersonTitles)Enum.Parse(person.GetType(), person.ToString());
答案 6 :(得分:1)
没有直接的方法,这是正确的方法。假设你可以这样做:
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”开始......
答案 7 :(得分:0)
类似于(SystemPersonTitles)(int)personTitle