Enumerare un Enum in C#

Payel Ganguly 12 ottobre 2023
  1. Metodo Enum.GetNames() per enumerare enum
  2. Metodo Enum.GetValues() per enumerare enum in C#
  3. Altri esempi
  4. Osservazioni:
Enumerare un Enum in C#

Questo tutorial introduce come enumerare un tipo enum in C# e lo dimostra attraverso una lista di esempi di codice.

Nel tutorial precedente, abbiamo imparato come recuperare il valore int da enum usando C#. Come menzionato nell’ultimo tutorial, Enumerazione o enum è un tipo di valore definito dall’utente che definisce un insieme di costanti denominate del tipo intero sottostante.

Sappiamo che la sintassi comune per enum è la seguente:

enum<enum_name> { enumeration_list }
;

enum_name specifica il nome del tipo di enumerazione e enumeration_list specifica una lista di identificatori separati da virgole.

Successivamente, vedremo come scorrere o enumerare tutti i valori enum in C#. Esistono diversi modi per enumerare un enum. I seguenti esempi illustreranno questi modi.

Metodo Enum.GetNames() per enumerare enum

Lo scopo è ottenere un array di nomi delle costanti nella lista di enumerazione utilizzando il metodo Enum.GetName(). Stampa l’array di nomi usando il bucle foreach.

using System;

public class Example1 {
  public enum Fruits { Apple, Banana, Orange, Watermelon, Mango, Strawberry }

  public static void Main() {
    foreach (string fruit in Enum.GetNames(typeof(Fruits))) {
      Console.WriteLine(fruit);
    }
  }
}

Produzione:

Apple Banana Orange Watermelon Mango Strawberry

Metodo Enum.GetValues() per enumerare enum in C#

Un altro approccio consiste nell’usare il metodo Enum.GetValues() che recupera un array dei valori delle costanti nell’lista di enumerazione. Inoltre stampa ogni valore usando il bucle foreach.

using System;

public class Example2 {
  public enum Subjects { Maths, Biology, English, Chemistry, Physics, History }

  public static void Main() {
    foreach (Subjects sub in Enum.GetValues(typeof(Subjects))) {
      Console.WriteLine(sub);
    }
  }
}

Produzione:

Maths Biology English Chemistry Physics History

Discutiamo alcuni altri esempi per avere un quadro completo dell’uso del metodo Enum.GetValues().

Altri esempi

Esempio 1:

using System;

public class Demo1 {
  enum Colors { White, Black, Red, Green, Blue }
  ;
  enum Planets { Earth = 0, Jupiter = 10, Saturn = 20, Mars = 30, Venus = 40 }
  ;

  public static void Main() {
    Console.WriteLine("The list of Colors Enum are:");
    foreach (int i in Enum.GetValues(typeof(Colors))) Console.WriteLine(i);

    Console.WriteLine();

    Console.WriteLine("The list of Planets Enum are:");
    foreach (int i in Enum.GetValues(typeof(Planets))) Console.WriteLine(i);
  }
}

Produzione:

The list of Colors Enum are : 0 1 2 3 4

    The list of Planets Enum are : 0 10 20 30 40

Nella prima parte dell’esempio precedente, gli elementi dell’array sono ordinati in base ai valori binari (cioè i valori senza segno) delle costanti di enumerazione.

Esempio 2:

using System;

enum SignValue { NegativeVal = -1, ZeroVal = 0, PositiveVal = 1 }
;

public class MainValue {
  public static void Main() {
    foreach (var val in Enum.GetValues(typeof(SignValue))) {
      Console.WriteLine("{0,3} 0X{0:X8} {1}", (int)val, ((SignValue)val));
    }
  }
}

Produzione:

0 ZeroVal 0X00000000 1 PositiveVal 0X00000001 - 1 NegativeVal 0XFFFFFFFF

L’esempio sopra mostra le informazioni sull’array restituito dal metodo Enum.GetValues() per l’lista di enumerazione che include valori zero, negativi e positivi.

Osservazioni:

Il metodo Enum.GetValues() restituisce un array che contiene un valore per ogni elemento di enum. se più elementi hanno lo stesso valore, la matrice generata include valori duplicati. In questo caso, la chiamata al metodo Enum.GetNames() con ogni valore nell’array restituito non ripristina i nomi univoci assegnati agli elementi che hanno valori duplicati. Per recuperare correttamente i nomi di tutti i membri dell’enumerazione, si consiglia di chiamare il metodo Enum.GetNames().

Articolo correlato - Csharp Enum