2009-08-10 5 views
1

J'essaie d'écrire une méthode qui analyse un paramètre de chaîne dans une énumération. Le type enum est également déterminé par un paramètre. C'est ce que j'ai commencé avec:Utilisation de 'Type' et 'Enum' comme paramètres dans .NET

public static type GetValueOrEmpty(string text, Type type) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return (type)Enum.Parse(typeof(type)value); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

De toute évidence, cela ne fonctionnera pas pour un certain nombre de raisons. Y a-t-il un moyen de le faire?

+1

une solution qui comprend énumérations nullabe et des fonctionnalités supplémentaires consultez https://gist.github.com/DoggettCK/1305566 –

Répondre

14

Vous pouvez le faire à la place générique, si vous connaissez le type à la compilation:

public static T GetValueOrEmpty<T>(string text) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return (T) Enum.Parse(typeof(T), text); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

Si vous ne connaissez pas le type à la compilation, puis d'avoir la méthode de retour ce type a gagné » t être très utile pour vous. Vous pouvez le faire revenir object bien sûr: Si aucun d'entre eux sont utiles pour vous

public static object GetValueOrEmpty(string text, Type type) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return Enum.Parse(type, text); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

, s'il vous plaît donner plus d'informations sur ce que vous essayez d'atteindre.

+1

Est-ce que je devrais changer vos réponses? Vous ne remarquez probablement même pas le +10 avec vos 86k de réputation. ;) –

+0

@SarahVessels: votre commentaire est si drôle aujourd'hui. –

3

Vous devez utiliser une méthode générique. Quelque chose comme ça devrait faire l'affaire:

public static TEnum ParseEnum<TEnum>(string s) 
{ 
    return (TEnum)Enum.Parse(typeof(TEnum), s); 
} 

EDIT: Correction d'une faute dans le code ...

+1

J'aime ajouter une contrainte de type 'où TEnum: struct' sur ces sortes de méthodes, pour essayer de limiter les types sur lesquels il peut être appelé (C# n'autorise pas une contrainte 'enum', 'struct' est le meilleur chose...) – thecoop

Questions connexes