Estoy tratando de devolver un valor de Enumeración fuertemente tipado de una cadena. Estoy seguro de que hay una mejor manera de hacer esto. Esto simplemente parece demasiado código para algo tan simple como esto:Cómo devolver un valor Enum a partir de una cadena?
public static DeviceType DefaultDeviceType
{
get
{
var deviceTypeString = GetSetting("DefaultDeviceType");
if (deviceTypeString.Equals(DeviceType.IPhone.ToString()))
return DeviceType.IPhone;
if (deviceTypeString.Equals(DeviceType.Android.ToString()))
return DeviceType.Android;
if (deviceTypeString.Equals(DeviceType.BlackBerry.ToString()))
return DeviceType.BlackBerry;
if (deviceTypeString.Equals(DeviceType.Other.ToString()))
return DeviceType.Other;
return DeviceType.IPhone; // If no default is provided, use this default.
}
}
Ideas?
Basado en los comentarios que recibí de la comunidad, he decidido utilizar una extensión de método que convierta una cadena en una enumeración. Toma un parámetro (el valor de enumeración predeterminado). Ese valor predeterminado también proporciona el tipo, por lo que se puede inferir el genérico y no es necesario especificarlo explícitamente usando <>. El método ahora se abrevia a esto:
public static DeviceType DefaultDeviceType
{
get
{
return GetSetting("DefaultDeviceType").ToEnum(DeviceType.IPhone);
}
}
Solución muy buena que puede reutilizarse en el futuro.
Muy bueno, me gusta la capacidad de proporcionar un valor predeterminado: probablemente termine usando esto. Gracias. –
Este es un buen enfoque. Dependiendo de su versión de .NET, el nuevo Enum.TryParse le permite mantener este mismo método mientras se deshace del bloque try. – TechNeilogy
@TechNeilogy Estoy usando .net 3.5, no vi el método TryParse, ¿debe ser nuevo con 4.0? –