He los métodos siguientes en una clase de enumeración helper (He simplificado para el propósito de la pregunta):¿Existe alguna forma mejor de crear una cadena de conversión genérica para el método enum o la extensión enum?
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));
}
}
Así que la pregunta aquí es, ¿puedo recortar esto a un método de extensión de enumeración o tal vez algún tipo de método único que puede manejar cualquier tipo. He encontrado algunos ejemplos para hacerlo con enumeraciones básicas, pero la diferencia en mi ejemplo es que todas las enumeraciones tienen el elemento Unknown
que necesito devolver si la cadena es nula o está vacía (si no se encuentra ninguna coincidencia, quiero que falle).
Buscando algo como lo siguiente tal vez:
EnumType1 value = EnumType1.Convert("Yes");
// or
EnumType1 value = EnumHelper.Convert(EnumType1, "Yes");
Una función para hacerlo todo ... cómo manejar el elemento Unknown
es la parte que me colgó.
Editar: Ajustó una de las enumeraciones para no ser definida con números enteros. Así que puedo garantizar que 0 siempre será el caso, pero Unknown
siempre será el texto correcto ... Supongo que podría usar el mismo ejemplo que el T (0) pero hacer otro análisis en el texto "Desconocido".
Restricción no puede ser de clase especial 'System.Enum' –
@ Maud'Dib: Uf, tienes razón. No vi el error en mi proyecto ficticio. Voy a actualizar. – chilltemp
@Kelsey: tienes razón, puedes simplemente rastrear 'Desconocido' cada vez, pero lanzar desde 0 es más eficiente suponiendo que es seguro para tus Enumeraciones. – chilltemp