2009-03-14 6 views
4

Je voudrais avoir une méthode d'aide simple pour convertir une chaîne en Enum. Quelque chose comme le suivant, mais il ne aime pas T comme le premier argument dans le Enum.Parse. L'erreur est T est un paramètre de type mais est utilisé comme une variable.C#, StringToEnum, puis-je en faire une fonction générique?

public static T StringToEnum<T>(String value) 
     { 
      return (T) Enum.Parse(T,value,true) ; 
     } 

Répondre

7

Essayez ceci:

public static T StringToEnum<T>(String value) 
{ 
    return (T)Enum.Parse(typeof(T), value, true); 
} 
+0

Cela devrait faire l'affaire. Pour développer cela: spécifier T équivaut à spécifier int ou string - vous avez toujours besoin de l'instruction typeof pour retourner l'objet System.Type réel. – Noldorin

+0

Merde, vous étiez plus rapide;) –

+0

Nice et rapide. Merci. – jeff

2
public static T StringToEnum<T>(String value) 
{ 
    return (T) Enum.Parse(typeof(T),value,true) ; 
} 

Ce que vous faites est comme en utilisant 'int' comme type, mais il est pas un objet de type. Pour obtenir l'objet Type, vous devez utiliser typeof (int).

0

Voici une extension de méthode que j'utilise.

/// <summary> 
/// Will parse and string value and return the Enum given. Case is ignored when doing the parse. 
/// </summary> 
/// <param name="typeOfEnum">The type of the Enum to Parse</param> 
/// <param name="value">The string value for the result of the Enum</param> 
/// <param name="errorValue">If an error is encountered this value is returned. (For example could be an Enum)</param> 
/// <returns>Returns Enum Object</returns> 
public static T ToEnum<T>(this string value) 
{ 
    return (T)Enum.Parse(typeof(T), value, true); 
} 
Questions connexes