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);

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

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