Je les méthodes suivantes dans une classe d'aide enum (je l'ai simplifié pour la fin de la question):Existe-t-il un meilleur moyen de créer une chaîne de conversion générique en méthode enum ou enum extension?
static class EnumHelper
{
public enum EnumType1 : int
{
Unknown = 0,
Yes = 1,
No = 2
}
public enum EnumType2 : int
{
Unknown = 0,
Dog = 1,
Cat = 2,
Bird = 3
}
public enum EnumType3
{
Unknown,
iPhone,
Andriod,
WindowsPhone7,
Palm
}
public static EnumType1 ConvertToEnumType1(string value)
{
return (string.IsNullOrEmpty(value)) ?
EnumType1.Unknown :
(EnumType1)(Enum.Parse(typeof(EnumType1), value, true));
}
public static EnumType2 ConvertToEnumType2(string value)
{
return (string.IsNullOrEmpty(value)) ?
EnumType2.Unknown :
(EnumType2)(Enum.Parse(typeof(EnumType2), value, true));
}
public static EnumType3 ConvertToEnumType3(string value)
{
return (string.IsNullOrEmpty(value)) ?
EnumType3.Unknown :
(EnumType3)(Enum.Parse(typeof(EnumType3), value, true));
}
}
La question ici est, je peux couper cela à une méthode d'extension Enum ou peut-être un type de méthode unique qui peut gérer n'importe quel type. J'ai trouvé quelques exemples pour le faire avec des énumérations de base mais la différence dans mon exemple est que tous les enums ont l'élément Unknown
que j'ai besoin retourné si la chaîne est nulle ou vide (si aucune correspondance n'est trouvée, je veux qu'elle échoue).
Vous cherchez quelque chose comme ce qui suit peut-être:
EnumType1 value = EnumType1.Convert("Yes");
// or
EnumType1 value = EnumHelper.Convert(EnumType1, "Yes");
une fonction à tout faire ... comment gérer l'élément Unknown
est la partie que je suis raccroché au nez.
Édition: Ajusté l'une des énumérations à ne pas définir avec des entiers. Donc je peux garantir que 0 sera toujours le cas mais Unknown
sera toujours le texte correct ... Je suppose que je pourrais utiliser le même exemple que le T (0) mais faire une autre analyse sur le texte "Inconnu".
La contrainte ne peut pas être de la classe spéciale 'System.Enum' –
@ Maud'Dib: Pouah, tu as raison. Je n'ai pas vu l'erreur dans mon projet fictif. Je vais mettre à jour. – chilltemp
@Kelsey: Votre droit, vous pouvez simplement reparer 'Inconnu' à chaque fois, mais lancer à partir de 0 est plus efficace en supposant que c'est sûr pour vos Enums. – chilltemp