C# - 将一个枚举转换为另一个

时间:2011-10-04 08:10:11

标签: c# enums

我有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 个答案:

答案 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