C#:基于不同枚举类型的枚举值返回枚举值

C#:基于不同枚举类型的枚举值返回枚举值,c#,enums,C#,Enums,因此,我希望有一个属性getter,它基于不同类型的枚举值返回枚举值,而不必求助于长switch语句。有没有办法使用索引或值来匹配两个枚举列表 public enum LanguageName { Arabic, Chinese, Dutch, English, Farsi, French, Hindi, Indonesian, Portugue

因此,我希望有一个属性getter,它基于不同类型的枚举值返回枚举值,而不必求助于长switch语句。有没有办法使用索引或值来匹配两个枚举列表

public enum LanguageName
    {
        Arabic,
        Chinese,
        Dutch,
        English,
        Farsi,
        French,
        Hindi,
        Indonesian,
        Portuguese,
        Spanish,
        Urdu
    }

    public enum LanguageISOCode
    {
        ara,
        zho,
        dut,
        eng,
        fas,
        fre,
        hin,
        ind,
        por,
        spa,
        urd
    }

public class language
{
    public language()
    {
    }

    public LanguageName Name
    {
        get
        {
           // get the Name enum based on the Code enum
        }
        set;
    }

    public LanguageISOCode Code
    {
        get;
        set;
    }
}

假设值的顺序相同,您可以先进行
int
转换:

public LanguageName Name
{
    get
    {
        int n = (int) Code;
        return (LanguageName)n;
    }
}
这需要确保枚举值始终按正确的顺序排列,或者显式为它们指定数值:

public enum LanguageName
{
    Arabic = 1,
    Chinese = 2,
    ...
}

public enum LanguageISOCode
{
    ara = 1,
    zho = 2,
    ...
}

上述内容不是必需的(因为标准保证它们被分配单调递增的数值),但至少在您可能决定对字段重新排序或诸如此类的情况下,它涵盖了您。

假设值的顺序相同,您可以先进行
int
转换:

public LanguageName Name
{
    get
    {
        int n = (int) Code;
        return (LanguageName)n;
    }
}
这需要确保枚举值始终按正确的顺序排列,或者显式为它们指定数值:

public enum LanguageName
{
    Arabic = 1,
    Chinese = 2,
    ...
}

public enum LanguageISOCode
{
    ara = 1,
    zho = 2,
    ...
}

上述内容不是必需的(因为标准保证它们会被分配单调递增的数值),但至少在您可能决定对字段重新排序或诸如此类的情况下,它涵盖了您。

您可以在这两者中使用相同的int值,并强制转换为int和强制转换为enum

public enum LanguageName
    {
        Arabic = 1,
        Chinese,
        Dutch,
        English,
        Farsi,
        French,
        Hindi,
        Indonesian,
        Portuguese,
        Spanish,
        Urdu
    }

    public enum LanguageISOCode
    {
        ara = 1,
        zho,
        dut,
        eng,
        fas,
        fre,
        hin,
        ind,
        por,
        spa,
        urd
    }

public class language
{
    public language()
    {
    }

    public LanguageName Name
    {
        get
        {
           return (LanguageName)((int)Code);
        }
        set;
    }

    public LanguageISOCode Code
    {
        get;
        set;
    }
}

或者您可以使用另一种方法,如使用[Description]并进行一些搜索。

您可以在这两种方法中使用相同的int值,并强制转换为int和强制转换为enum

public enum LanguageName
    {
        Arabic = 1,
        Chinese,
        Dutch,
        English,
        Farsi,
        French,
        Hindi,
        Indonesian,
        Portuguese,
        Spanish,
        Urdu
    }

    public enum LanguageISOCode
    {
        ara = 1,
        zho,
        dut,
        eng,
        fas,
        fre,
        hin,
        ind,
        por,
        spa,
        urd
    }

public class language
{
    public language()
    {
    }

    public LanguageName Name
    {
        get
        {
           return (LanguageName)((int)Code);
        }
        set;
    }

    public LanguageISOCode Code
    {
        get;
        set;
    }
}

或者,您可以使用另一种方法,如使用[Description]并进行一些搜索。

您可以使用
字典
进行一个到另一个的显式映射

Dictionary<LanguageName, LanguageISOCode> languageCodes = new Dictionary<LanguageName, LanguageISOCode> {
  {LanguageName.Arabic,LanguageISOCode.ara},
  {LanguageName.Chinese,LanguageISOCode.zho},
  //...
};

LanguageName lang = LanguageName.Arabic;
LanguageISOCode code = languageCodes[lang];
字典语言code=新字典{
{LanguageName.阿拉伯语,LanguageISOCode.ara},
{LanguageName.Chinese,LanguageISOCode.zho},
//...
};
LanguageName lang=LanguageName.阿拉伯语;
LanguageISOCode代码=languageCodes[lang];

您可以使用
字典
进行一个到另一个的显式映射

Dictionary<LanguageName, LanguageISOCode> languageCodes = new Dictionary<LanguageName, LanguageISOCode> {
  {LanguageName.Arabic,LanguageISOCode.ara},
  {LanguageName.Chinese,LanguageISOCode.zho},
  //...
};

LanguageName lang = LanguageName.Arabic;
LanguageISOCode code = languageCodes[lang];
字典语言code=新字典{
{LanguageName.阿拉伯语,LanguageISOCode.ara},
{LanguageName.Chinese,LanguageISOCode.zho},
//...
};
LanguageName lang=LanguageName.阿拉伯语;
LanguageISOCode代码=languageCodes[lang];

您可以明确声明一个枚举值等于另一个枚举值,如下所示:

public enum LanguageName
{
    Arabic,
    Chinese,
    Dutch,
    ...
}

public enum LanguageISOCode
{
    ara = LanguageName.Arabic,
    zho = LanguageName.Chinese,
    dut = LanguageName.Dutch,
    ...
 }
这样你就可以在他们之间进行转换:

 LanguageISOCode codeValue = LanguageISOCode.ara;

 LanguageName name = (LanguageName)(int)codeValue;


虽然上面的内容应该回答您明确的问题,但您应该看看这个类。它提供了许多有关各种区域性的功能。

您可以明确声明一个枚举值等于另一个枚举值,如下所示:

public enum LanguageName
{
    Arabic,
    Chinese,
    Dutch,
    ...
}

public enum LanguageISOCode
{
    ara = LanguageName.Arabic,
    zho = LanguageName.Chinese,
    dut = LanguageName.Dutch,
    ...
 }
这样你就可以在他们之间进行转换:

 LanguageISOCode codeValue = LanguageISOCode.ara;

 LanguageName name = (LanguageName)(int)codeValue;


虽然上面的内容应该回答您明确的问题,但您应该看看这个类。它提供了许多关于不同文化的功能。

谢谢!你给了我我所怀疑的一切。谢谢你提到CultureInfo课程。太好了,正是我想要的!谢谢你给了我我所怀疑的一切。谢谢你提到CultureInfo课程。太好了,正是我想要的!