Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment indexer une énumération

2 réponses
Avatar
Pierre FRERE
Bonjour,

Soit l'énumération :
public enum Language {


/// <remarks/>

EnglishTOChinese,


/// <remarks/>

EnglishTOFrench,


/// <remarks/>

EnglishTOGerman,

...

}

Quelle est la syntaxe à utiliser pour pointer directement un élément par son
rang et non par son symbole :

au lieu de :

TranslationResult = ts.Translate(Language.FrenchTOEnglish,
TranslationResult);

je souhaite ce genre de solution :

int choix = 1; -- par exemple

TranslationResult = ts.Translate(Language[Choix], TranslationResult); --
recherche par index

Merci d'avance.

Pierre

2 réponses

Avatar
Piotrek
Salut

Indexer c'est pas possible (dans le sens de Language[Choix]) mais tu peux
faire ceci

public enum Language {EnglishTOChinese=1,EnglishTOFrench=2,...};

puis

TranslationResult = ts.Translate(1, TranslationResult);
Avatar
Ambassadeur Kosh
je ne crois pas que ça soit une super idée...
mieux vaut définir une fonction de hash
et puis, qu'est-ce qui empeche de faire des objets ?

class Language
{
private Language(string name)
{
this.name = name;
}

private string name ;

public override bool Equals(object obj)
{
if (!(obj is Language)) return false;
if (this == obj) return true;

Language myLanguage = (Language)obj;

if (name != null ? name.Equals(myLanguage.name): myLanguage.name ! null)
return false;

return true;
}

public virtual int GetHashCode()
{
return (name != null ? name.GetHashCode() : 0);
}

// et la, le point central
public static readonly Language French = new Language("français") ;
public static readonly Language English = new Language("anglais") ;
}

du coup, tout ça devient completement indexable. non ?
et ça evite de manger l'eternel cast d'enum vers entier et pire l'inverse.

voila voila