Représentation en chaîne d'un Enum

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Représentation en chaîne d'un Enum

Message par ForumBot »

Représentation en chaîne d’un Enum

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Représentation en chaîne d'un Enum

Message par ayi »

Essayez le patron type-safe-enum.


public sealed class AuthenticationMethod {

private readonly String name;
private readonly int value;

public static readonly AuthenticationMethod FORMS = new AuthenticationMethod (1, "FORMS");
public static readonly AuthenticationMethod WINDOWSAUTHENTICATION = new AuthenticationMethod (2, "WINDOWS");
public static readonly AuthenticationMethod SINGLESIGNON = new AuthenticationMethod (3, "SSN");

private AuthenticationMethod(int value, String name){
this.name = name;
this.value = value;
}

public override String ToString(){
return name;
}

}


Mise à jour

La conversion de type explicite (ou implicite) peut être effectuée en





ajoutant un champ statique avec le mapping


private static readonly Dictionary<string, AuthenticationMethod> instance = new Dictionary<string,AuthenticationMethod>();




  • n.b. Pour que l’initialisation des champs “membres de l’enum” ne lève pas une NullReferenceException lors de l’appel du constructeur d’instance, assurez-vous de placer le champ Dictionary avant les champs “membres de l’enum” dans votre classe. C’est parce que les initialiseurs de champs statiques sont appelés dans l’ordre de déclaration, et avant le constructeur statique, créant la situation étrange et nécessaire mais confuse où le constructeur d’instance peut être appelé avant que tous les champs statiques aient été initialisés, et avant que le constructeur statique soit appelé.





remplissant ce mapping dans le constructeur d’instance


instance[name] = this;





et ajoutant un opérateur de conversion de type défini par l’utilisateur


public static explicit operator AuthenticationMethod(string str)
{
AuthenticationMethod result;
if (instance.TryGetValue(str, out result))
return result;
else
throw new InvalidCastException();
}

Répondre

Revenir à « .NET & C# »