web-dev-qa-db-fra.com

Casting string to enum

Je lis le contenu du fichier et prends la chaîne à l'emplacement exact comme celui-ci

 string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);

La sortie sera toujours soit Ok ou Err

De l'autre côté j'ai MyObject qui ont ContentEnum comme ceci

public class MyObject

    {
      public enum ContentEnum { Ok = 1, Err = 2 };        
      public ContentEnum Content { get; set; }
    }

Maintenant, côté client, je veux utiliser un code comme celui-ci (pour convertir ma chaîne fileContentMessage en Content property)

string fileContentMessage = File.ReadAllText(filename).Substring(411, 3);

    MyObject myObj = new MyObject ()
    {
       Content = /// ///,
    };
72
user1765862

Utilisez Enum.Parse() .

var content = (ContentEnum)Enum.Parse(typeof(ContentEnum), fileContentMessage);
168
CodeCaster

En plus, vous pouvez prendre le Enum.Parse réponses déjà fournies et insérez-les dans une méthode statique facile à utiliser dans une classe d'assistance.

public static T ParseEnum<T>(string value)
{
    return (T)Enum.Parse(typeof(T), value, ignoreCase: true);
}

Et utilisez-le comme suit:

{
   Content = ParseEnum<ContentEnum>(fileContentMessage);
};

Particulièrement utile si vous avez beaucoup d’énumérations (différentes) à analyser.

26
pleinolijf

.NET 4.0+ a un générique Enum.TryParse

ContentEnum content;
Enum.TryParse(fileContentMessage, out content);
21
Chris Fulstow

Jetez un coup d'œil à l'utilisation de quelque chose comme

Enum.TryParse

Convertit la représentation sous forme de chaîne du nom ou de la valeur numérique d'une ou de plusieurs constantes énumérées en un objet énuméré équivalent. Un paramètre spécifie si l'opération est sensible à la casse. La valeur de retour indique si la conversion a réussi.

ou

Enum.Parse

Convertit la représentation sous forme de chaîne du nom ou de la valeur numérique d'une ou de plusieurs constantes énumérées en un objet énuméré équivalent.

18
Adriaan Stander