Ниже приведен фрагмент кода, который я нахожу полезным в том, что я могу использовать его, чтобы быстро перевернуть круглые перечисления. CurrentEnum хранит ссылку на перечисление, которое использовалось для предоставления строк, в данном случае "Лысый", и оно может меняться.
То, что я пытаюсь сделать, это повторить ту же функциональность в Silverlight, которая не имеет функции GetEnumValues. Предпочтительным решением будет метод расширения, который можно использовать так же, как в моем примере ниже.
class Program
{
enum Cats { Fluffy, Furry, Bald };
enum Dogs { Big, Fat, Ugly };
static Type CurrentEnum = typeof(Cats);
static void Main(string[] args)
{
Int32 i = (Int32)Enum.Parse(CurrentEnum, "Bald", true);
i = i == CurrentEnum.GetEnumValues().Length - 1 ? 0 : i + 1;
String nextValue = CurrentEnum.GetEnumValues().GetValue(i).ToString();
Console.WriteLine(nextValue);
Console.ReadKey();
}
}
UPDATE:
Вот что я решил сейчас:
public static class Extensions
{
public static Array GetEnumValues(this Type enumType)
{
if (enumType == null) throw new ArgumentException("Type 'enumType' cannot be null");
if (!enumType.IsEnum) throw new ArgumentException("Type '" + enumType.Name + "' is not an enum");
Int32 i = 0;
Boolean bDefined = true;
List<String> list = new List<String>();
do
{
if (Enum.IsDefined(enumType, i))
{
list.Add(Enum.GetName(enumType, i));
++i;
}
else
{
bDefined = false;
}
}
while (bDefined);
return list.ToArray();
}
}