Jednym z częstszych problemów występujących w C#. Rozwiązanie jest takie oczywiste, czasem jest ono przydatne.
Jak można użyć pętli foreach na naszym typie wyliczeniowym.
Poniższy kod się nie skompiluje:
public enum GuitarString
{
PhosphorBronze,
Bronze8020,
SilkandSteel,
Nylon,
FlatwoundStrings
}
public static void EnumerateAllGuitarString()
{
foreach (GuitarString guitarstring in GuitarString)
{
Console.WriteLine(guitarstring);
}
}
Kompilator zwróci następujący błąd
Rozwiązanie wymaga trochę więcej kodu.
public static void EnumerateAllGuitarString()
{
foreach (GuitarString guitarstring in
Enum.GetValues(typeof(GuitarString)))
{
Console.WriteLine(guitarstring);
}
}
Metoda “GetValues” zwraca obiekt System.Array, czyli tablicę. Jeżeli użyjesz bezpośrednio pętli foreach na tym obiekcie, to będziesz używał niegenerycznej wersji implementacji IEnumerable klasy System.Array.
Co oznacza, że każdy obiekt musi być wpakowany do typu Object, a potem z niego wypakowany. By tego uniknąć najlepiej napisać taki kod.
public static void EnumerateAllGuitarString()
{
foreach (GuitarString guitarstring in
(GuitarString[])Enum.GetValues(typeof(GuitarString)))
{
Console.WriteLine(guitarstring);
}
}