1 votes

C# : Retourner une valeur d'enum basée sur une valeur d'enum d'un type d'enum différent

Je veux donc avoir un getter de propriété qui renvoie une valeur d'enum basée sur une valeur d'enum d'un type différent sans avoir à recourir à une longue instruction switch. Existe-t-il un moyen de faire correspondre les deux listes d'énumérations à l'aide d'un index ou de valeurs ?

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

8voto

Adam Robinson Points 88472

Vous pouvez déclarer explicitement qu'une valeur d'énumération est égale à une autre, comme suit :

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

public enum LanguageISOCode
{
    ara = LanguageName.Arabic,
    zho = LanguageName.Chinese,
    dut = LanguageName.Dutch,
    ...
 }

Ce qui vous permettra de passer d'une catégorie à l'autre :

 LanguageISOCode codeValue = LanguageISOCode.ara;

 LanguageName name = (LanguageName)(int)codeValue;

ou

 LanguageName nameValue = LanguageName.Arabic;

 LanguageISOCode = (LanguageISOCode)(int)nameValue;

Bien que les éléments ci-dessus devraient répondre à votre question explicite, vous devriez jeter un coup d'œil sur le site web de la Commission européenne. System.Globalization.CultureInfo classe. Elle offre un grand nombre de fonctionnalités concernant les différentes cultures.

3voto

Igor Zevaka Points 32586

Vous pouvez utiliser Dictionary<LanguageName, LanguageISOCode> pour une correspondance explicite de l'un à l'autre.

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

LanguageName lang = LanguageName.Arabic;
LanguageISOCode code = languageCodes[lang];

2voto

Dean Harding Points 40164

En supposant que les valeurs soient dans le même ordre, vous pouvez simplement passer par une fonction int première conversion :

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

Pour cela, il faut s'assurer que les valeurs énumérées sont toujours dans le bon ordre ou leur attribuer explicitement des valeurs numériques :

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

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

Ce qui précède n'est pas obligatoire (puisque la norme garantit l'attribution de valeurs numériques monotones croissantes), mais cela vous protège au moins dans le cas où vous décideriez de réorganiser les champs, ou quelque chose de ce genre.

1voto

Zote Points 3385

Il est possible d'utiliser la même valeur int dans les deux cas, et de la convertir en int et en 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;
    }
}

Vous pouvez également utiliser une autre approche, comme [Description] et effectuer une recherche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X