C# Enum(enumerazione) con esempio

⚡ Riepilogo intelligente

In C#, le enumerazioni definiscono un insieme denominato di valori interi costanti, come ad esempio i giorni della settimana, rendendo il codice più leggibile e manutenibile. La parola chiave `enum` dichiara queste costanti fisse una sola volta, per poterle riutilizzare in tutto il programma.

  • 📐 Definizione: La parola chiave enum raggruppa costanti denominate correlate sotto un unico tipo, sostituendo i numeri magici sparsi con identificatori leggibili.
  • 🗓️ Esempio di giorni: Un'enumerazione chiamata Days memorizza i giorni della settimana e Days.Sun restituisce il membro selezionato tramite il suo nome.
  • 🔢 Valori fondamentali: I membri dell'enumerazione corrispondono a valori interi che partono da zero e aumentano di uno, a meno che non vengano assegnati numeri personalizzati.
  • 🔁 conversioni: I cast espliciti trasformano un'enumerazione nel suo intero corrispondente, mentre Enum.Parse e Enum.TryParse riconvertono il testo in membri.
  • 🚩 Bandiere: L'attributo Flags consente a un'enumerazione di combinare diverse opzioni come campi di bit utilizzando l'operatore OR bit a bit.
  • 🤖 Assistenza AI: GitHub Copilot e ML.NET aiutano a generare definizioni di enumerazioni e a mappare le enumerazioni alle funzionalità di apprendimento automatico.

Enum (enumerazione) in C#

Enumerazione C#

Un'enumerazione viene utilizzata in qualsiasi linguaggio di programmazione per definire un insieme costante di valori. Ad esempio, i giorni della settimana possono essere definiti come un'enumerazione e utilizzati in qualsiasi punto del programma. In C# l'enumerazione viene definita con l'aiuto della parola chiave 'enum'.

Vediamo un esempio di come possiamo utilizzare la parola chiave 'enum'.

Nel nostro esempio definiremo un'enumerazione chiamata days, che verrà utilizzata per memorizzare i giorni della settimana. Per ogni esempio, modificheremo solo la funzione principale nel nostro file Program.cs.

Enumerazione C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program 
 {
  enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat};
  
  static void Main(string[] args) 
  {
   Console.Write(Days.Sun);
   
   Console.ReadKey();
  }
 }
}

Code Spiegazione:-

  1. L'"enumerazione" tipo di dati è specificato per dichiarare un'enumerazione. Il nome dell'enumerazione è Giorni. Tutti i giorni della settimana sono specificati come valori dell'enumerazione.
  2. Infine la funzione console.write viene utilizzata per visualizzare uno dei valori dell'enumerazione.

Se il codice sopra riportato viene immesso correttamente e il programma viene eseguito correttamente, verrà visualizzato il seguente output.

Produzione:

Enumerazione C#

Dall'output, puoi vedere che il valore "Sole" dell'enumerazione viene visualizzato nella console.

Perché utilizzare gli enum in C#?

Le enumerazioni rendono un programma più leggibile, più sicuro e più semplice da manutenere. Invece di disseminare numeri senza spiegazione, a volte chiamati numeri magici, in tutto il codice, un'enumerazione assegna a ciascun valore un nome descrittivo che ne indica lo scopo.

  • leggibilità: Un nome come Days.Fri è molto più chiaro del numero 5, quindi chiunque legga il codice ne comprende immediatamente il significato.
  • Tipo di sicurezza: Una variabile dichiarata con un tipo enum può contenere solo uno dei membri definiti, il che impedisce l'inserimento di valori non validiping pollici
  • Manutenibilità: Le costanti correlate risiedono in un unico punto, quindi l'aggiunta o la ridenominazione di un valore aggiorna l'intero programma in modo coerente.
  • Associazione dati: Framework come WPF e ASP.NET consentono di associare un'enumerazione a un elenco a discesa, rendendo le enumerazioni utili per la creazione di interfacce utente.

Poiché il compilatore verifica ogni assegnazione rispetto ai membri consentiti, gli enum aiutano anche a individuare gli errori in anticipo, prima dell'esecuzione del programma.

Assegnazione di valori personalizzati a un'enumerazione C#

Per impostazione predefinita, C# assegna al primo membro dell'enumerazione il valore 0 e incrementa di uno ogni membro successivo. Nell'enumerazione Days riportata sopra, Sun è uguale a 0, Mon è uguale a 1 e Sat è uguale a 6. È possibile sovrascrivere questi valori predefiniti assegnando numeri espliciti.

  • Valori espliciti: Scrivendo l'enumerazione Level {Low = 1, Medium = 5, High = 10}, ogni membro viene impostato su un numero scelto anziché sulla sequenza predefinita.
  • Compito parziale: Se si assegna un valore solo ad alcuni membri, il compilatore mantiene la numerazione a partire dall'ultimo valore assegnato per i membri successivi.
  • Tipo sottostante: Un'enumerazione memorizza i suoi membri come interi per impostazione predefinita, ma è possibile basarla su byte, short o long per risparmiare memoria o estendere l'intervallo.

I valori personalizzati sono utili quando i numeri devono corrispondere a un sistema esterno, come codici di database o costanti di protocollo, in modo che l'enumerazione rispecchi esattamente i dati reali.

Come convertire gli enum C# in int, string e flag

In C# è spesso necessario convertire un valore enum in un altro formato, ad esempio memorizzandolo come numero o leggendolo da testo. Queste conversioni avvengono in alcuni modi standard.

  • Enum in int: Un cast esplicito come (int)Days.Wed restituisce l'intero sottostante, utile per l'archiviazione o per le operazioni aritmetiche.
  • da intero a enumerazione: Eseguendo il casting nella direzione opposta, ad esempio (Days)3, un numero viene riconvertito nel corrispondente membro dell'enumerazione.
  • Da stringa a enumerazione: Enum.Parse e il più sicuro Enum.TryParse convertono un nome come "Fri" nel membro Days.Fri senza generare un'eccezione per testo non valido.
  • Enum in stringa: La chiamata a ToString su qualsiasi membro restituisce il suo nome, quindi Days.Sun.ToString() produce "Sun" per la visualizzazione o la registrazione.
  • Elenco dei membri: I metodi Enum.GetValues ​​e Enum.GetNames restituiscono tutti i valori o i nomi, il che è utile per popolare i menu o convalidare l'input.

Quando un'enumerazione deve rappresentare una combinazione di scelte anziché una singola opzione, applica l'attributo Flags e assegna a ciascun membro una potenza di due, ad esempio 1, 2, 4 e 8. Puoi quindi combinare i membri con l'operatore OR bit a bit e verificare la presenza di un'opzione specifica con il metodo HasFlag.

Queste tecniche di conversione consentono a un enum di spostarsi agevolmente tra nomi leggibili, numeri memorizzati e set di flag combinati, mantenendoping il resto del programma è sia a prova di errore che di facile comprensione.

DOMANDE FREQUENTI

Una variabile enum ha come valore predefinito 0, ovvero il valore mappato al membro che corrisponde a 0. Se nessun membro è uguale a 0, la variabile mantiene comunque 0, quindi gli sviluppatori spesso definiscono prima un membro None o Unknown per evitare confusione.

Una costante definisce un singolo valore denominato, mentre un'enumerazione raggruppa un insieme correlato di costanti denominate sotto un unico tipo. Le enumerazioni aggiungono anche sicurezza dei tipi, perché una variabile può contenere solo uno dei membri definiti dall'enumerazione.

Sì. Un'enumerazione può essere dichiarata all'interno di un namespace o annidata all'interno di una classe o di una struct, il che ne limita l'ambito a quel tipo. C#, tuttavia, non consente di dichiarare un'enumerazione all'interno del corpo di un metodo.

Sì. Due o più membri possono condividere lo stesso numero sottostante, rendendo i nomi successivi alias del primo. I confronti li trattano come uguali e la conversione di quel valore in una stringa restituisce il nome definito per primo nell'enumerazione.

Un enum è un tipo valore, quindi memorizza i suoi dati direttamente anziché come riferimento nell'heap. Eredita da System.Enum ma si comporta come il tipo intero sottostante, il che rende veloci la copia e il confronto dei valori dell'enum.

Sì. In ML.NET è possibile mappare un'enumerazione a una caratteristica categorica o a un'etichetta, spesso convertendola nel suo valore intero o in una codifica one-hot. Le enumerazioni fortemente tipizzate mantengono chiare e coerenti le colonne di input di una pipeline di machine learning.

Sì. GitHub Copilot suggerisce definizioni enum complete, valori personalizzati, attributi Flags e helper di conversione come Enum.TryParse all'interno di Visual Studio e VS Code. RevEsamina attentamente ogni suggerimento, poiché Copilot potrebbe selezionare valori o nomi non adatti al tuo dominio.

Utilizza il metodo Enum.IsDefined, che restituisce true quando un determinato numero o nome corrisponde a un membro definito. Abbinandolo a Enum.TryParse, puoi convalidare l'input dell'utente in modo sicuro prima di convertire il testo in un valore enum.

Riassumi questo post con: