Je crois que c'est la même chose que dans le .NET Compact Framework. Si nous supposons que vos valeurs enum commencent à 0 et utilisent chaque valeur jusqu'à ce que leur plage soit supérieure au code suivant, cela devrait fonctionner.
public static IList<int> GetEnumValues(Type oEnumType)
{
int iLoop = 0;
bool bDefined = true;
List<int> oList = new List<int>();
//Loop values
do
{
//Check if the value is defined
if (Enum.IsDefined(oEnumType, iLoop))
{
//Add item to the value list and increment
oList.Add(iLoop);
++iLoop;
}
else
{
//Set undefined
bDefined = false;
}
} while (bDefined);
//Return the list
return oList;
}
Évidemment, vous pouvez modifier le code pour renvoyer les noms d’énumération ou pour faire correspondre différents modèles, par exemple des valeurs au niveau du bit.
Voici une autre version de la méthode qui renvoie un IList<EnumType>
.
public static IList<T> GetEnumValues<T>()
{
Type oEnumType;
int iLoop = 0;
bool bDefined = true;
List<T> oList = new List<T>();
//Get the enum type
oEnumType = typeof(T);
//Check that we have an enum
if (oEnumType.IsEnum)
{
//Loop values
do
{
//Check if the value is defined
if (Enum.IsDefined(oEnumType, iLoop))
{
//Add item to the value list and increment
oList.Add((T) (object) iLoop);
++iLoop;
}
else
{
//Set undefined
bDefined = false;
}
} while (bDefined);
}
//Return the list
return oList;
}