2009-08-19 7 views
0

Je suis en train d'analyser des valeurs enum à partir d'un fichier texte. Afin de simplifier les choses que je utilise des fonctions comme les suivantes:TryParsing Enums

(Le code exemple ici utilise C++/CLI mais les réponses en C# sont également les bienvenus.)

bool TryParseFontStyle(String ^string, FontStyle% style){ 
    try { 
     FontStyle ^refStyle = dynamic_cast<FontStyle^>(
      Enum::Parse(FontStyle::typeid, string)); 
     if(refStyle == nullptr) 
      return false; 
      style = *refStyle; 
     return true; 
    } 
    catch(Exception ^e){ 
     return false; 
    } 
} 

Maintenant je dois réécrire la même fonctions pour chaque type d'énumération que j'analyse. Comment utiliser des génériques pour écrire une seule fonction pour gérer un type enum?

Mise à jour: trouvé une question similaire ici: How to TryParse for Enum value?

Répondre

1
public static bool TryParseEnum<T> (string value, out T result) where T : struct 
{ 
    if (value == null) 
    { 
     result = default (T) ; 
     return false ; 
    } 

    try 
    { 
     result = (T) Enum.Parse (typeof (T), value) ; 
     return true ; 
    } 
    catch (ArgumentException) 
    { 
     result = default (T) ; 
     return false ; 
    } 
} 
+0

Merci. C'est ce que je cherchais. Y a-t-il un moyen de restreindre T à un dérivé d'Enum? –

+0

Non, il n'y en a pas. –

0

Cette méthode semble fonctionner et ne pas utiliser try/catch.

public static bool EnumTryParse<T>(string strType,out T result) 
{ 
    string strTypeFixed = strType.Replace(' ', '_'); 
    if (Enum.IsDefined(typeof(T), strTypeFixed)) 
    { 
     result = (T)Enum.Parse(typeof(T), strTypeFixed, true); 
     return true; 
    } 
    else 
    { 
     foreach (string value in Enum.GetNames(typeof(T))) 
     { 
      if (value.Equals(strTypeFixed, StringComparison.OrdinalIgnoreCase)) 
      { 
       result = (T)Enum.Parse(typeof(T), value); 
       return true; 
      } 
     } 
     result = default(T); 
     return false; 
    } 
} 

Source

0

en C#:

Enum.Parse(typeof(yourEnum),"yourValue"); 

ambiophoniques qu'avec des prises try et votre jeu pour aller

+1

En fait, Enum.Parse (typeof (yourEnum), "yourValue"); –

+0

C'est exact, merci;) – Sergio

Questions connexes