C # ENUM à chaîne d'auto-conversion?
-
26-09-2019 - |
Question
Est-il possible d'avoir le compilateur convertir automatiquement mes valeurs Enum à des chaînes afin que je puisse éviter d'appeler explicitement la méthode ToString chaque fois. Voici un exemple de ce que je voudrais faire:
enum Rank { A, B, C }
Rank myRank = Rank.A;
string myString = Rank.A; // Error: Cannot implicitly convert type 'Rank' to 'string'
string myString2 = Rank.A.ToString(); // OK: but is extra work
La solution
Non. Un ENUM est son propre type si vous voulez convertir à autre chose, vous devez faire un certain travail.
Toutefois, en fonction de ce que vous faites avec elle, certaines tâches appelleront ToString () sur automatiquement pour vous. Par exemple, vous pouvez faire:
Console.Writeline(Rank.A);
Autres conseils
Vous n'êtes pas probablement à la recherche énumérations lui-même, mais une liste de constante de chaîne. Il peut répondre à vos besoins mieux dans certains scénarios.
Utilisez ceci:
public static class Rank
{
public const string A = "A";
public const string B = "B";
public const string C = "C";
}
Non, mais au moins vous pouvez faire des choses avec les énumérations qui appelleront leurs méthodes de ToString()
quand vous pourriez avoir besoin d'utiliser leur valeur de chaîne, par exemple:.
Console.WriteLine(Rank.A); //prints "A".
La syntaxe correcte doit être
myRank.ToString("F");
[Attention, bidouille] Pas sûr de savoir si cela est méchant, pour moi, il semble un compromis raisonnable.
var myEnumAsString = MyEnum+"";
Console.WriteLine(myEnumAsString); //MyEnum
Cela forcera ToString implicite ()