2016-08-05 3 views
0

J'essaie de déterminer si une valeur de chaîne lue à partir d'un fichier est trouvée dans une énumération de mon code.Comparaison d'une valeur de chaîne à TOUTES les valeurs d'une énumération en C# à l'aide de TryParse - Logic Problème

ENUM:

internal enum Difficulty { None, Easy, Medium, Hard } 

A ce moment dans mon code header[i] = "EASY". Je veux comparer cette valeur de n'importe quelle des valeurs trouvées dans Difficulty enum mais je rencontre des difficultés.

Le code:

Chaque fois que le code suivant est exécuté, l'instruction if renvoie false parce que "Easy" != "EASY".

Difficulty dif = Difficulty.None; 
if (Difficulty.TryParse(header[i], out dif)) {  // RETURNS FALSE 
    MyLog.Write("It's in the Enum!"); 
} 

J'ai essayé de comparer la valeur header[i] à la valeur Difficulty dans la déclaration TryParse, mais il en résulte une erreur de compilation.

Y at-il quelque chose que je peux faire en plus de changer toutes les valeurs Difficulty en majuscules?

+0

S'il vous plaît ne pas ajouter des réponses à la question dans la question lui-même. Si vous avez trouvé une solution, marquez l'une des réponses comme correcte ou ajoutez une réponse vous-même. – progyammer

+1

@progy_rock Mes excuses, j'avais oublié. J'ai simplement ajouté la solution à ma question pour faciliter l'accès à toute personne qui la lit plus tard – TheAuzzieJesus

Répondre

1

La valeur .ToString pour tout Enum renvoie juste le nom que vous lui fournissez. Donc, si vous allez être en train de faire cela dans une boucle je vous conseille de prendre tous les noms à une liste locale et la recherche dans ce qui se traduirait par une meilleure performance:

string[] enumNames = Enum.GetNames(typeof(Difficulty)); 

bool found = enumNames.Any(x => x.Equals(header[i], StringComparison.OrdinalIgnoreCase));