J'essaie de renvoyer une valeur d'énumération fortement typée à partir d'une chaîne. Je suis sûr qu'il y a une meilleure façon de le faire. Cela semble juste beaucoup trop de code pour une chose simple comme ceci:Comment renvoyer une valeur Enum à partir d'une chaîne?
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.
}
}
Idées? Sur la base des commentaires que j'ai reçus de la communauté, j'ai décidé d'utiliser une extension de méthode qui convertit une chaîne en une énumération. Il prend un paramètre (la valeur d'énumération par défaut). Cette valeur par défaut fournit également le type, de sorte que le générique peut être déduit et n'a pas besoin d'être spécifié explicitement en utilisant <>. La méthode est maintenant raccourcie à ceci:
public static DeviceType DefaultDeviceType
{
get
{
return GetSetting("DefaultDeviceType").ToEnum(DeviceType.IPhone);
}
}
Solution très cool qui peut être réutilisée dans le futur.
Très cool, j'aime la possibilité de fournir un défaut - je vais probablement finir par l'utiliser. Merci. –
C'est une bonne approche. En fonction de votre version de .NET, le plus récent Enum.TryParse vous permet de conserver cette même méthode tout en vous débarrassant du bloc try. – TechNeilogy
@TechNeilogy J'utilise .net 3.5, n'a pas vu la méthode TryParse - qui doit être nouvelle avec 4.0? –