以下は、enumを素早くニップするために使用できるという点で便利なコードです。 CurrentEnumは、文字列を提供するために使用されたenumへの参照を格納します。この場合、 "Bald"は変更できます。.NETと同じように動作するSilverlightでGetEnumValues拡張メソッドを作成するにはどうすればよいですか?
私がしようとしているのは、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();
}
}
[この質問](http://stackoverflow.com/questions/1038234)で動作しなかったことを教えていただければ、本当に助かります。重複している可能性について疑問を呈するのではなく、私たちはあなたを助けてくれるでしょう。 –
私はすでに消滅したコメントに応じてこれを行っていました。その質問のコメントに記載されているように、ソリューションは.NETと同じように動作しないため、私の例ではCurrentEnum変数では動作しません。私の質問は非常に具体的で、私の例はテストです。 – descf
私はそれを無視したことは認めますが、回答の形式が私には見えず、投票が1つしかないためです。おそらく私はそれをもっとよく見てみるべきです。 – descf