Hur man enumerate C# enum
Enums används ofta i språket C#.
Det finns fyra sätt att enumerate enum i C#.
- Användning av
C# Enum.GetValues()i .Net 5 och högre. - Användning av
C# Enum.GetValues()i äldre .Net-versioner. - Användning av
C# Enum.GetNames()för att enumeratera enum -namn som strängar. - Använda
Linq
Låt oss gå igenom ett exempel för att förstå det bättre.
Först skapar vi en C# enum
public enum LogLevel
{
ERROR,
WARN,
INFO,
DEBUG
}
The enum representerar olika typer av loggningsnivåer.
Nu ska vi se olika sätt att enumerera loggningen C# enum.
Använda C# Enum.GetValues() Generisk metod i .Net 5 och högre
Om du använder den senaste versionen av .Net, dvs. .Net 5 och senare, kan du använda den generiska versionen av Enum.GetValues -metoden för att enumeratera C# enum.
void loopEnum()
{
LogLevel[] logLevels = Enum.GetValues<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Den nya generiska versionen av Enum.GetValues returnerar matrisen med värden från enum.
Vidare kan vi använda for eller foreach för att räkna upp de C# enum namn.
Eftersom matrisen innehåller enum typ måste vi konvertera den till sträng med hjälp av ToString() -metoden.
Användning av C# Enum.GetValues() i äldre .Net-versioner.
I de äldre versionerna av .Net finns det ingen generisk metod tillgänglig för Enum.GetValues() -metoden.
Du måste skicka typeof() enum som en parameter till Enum.GetValues() -metoden.
Array logLevels = Enum.GetValues(typeof(LogLevel))
Den returnerar enum -värden av typen System.Array och vi kan använda foreach -anvisningen för att gå igenom C# enum namn.
void loopEnum()
{
Array logLevels = Enum.GetValues(typeof(LogLevel))
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Om du vill ha resultatet IEnumerable kan du använda Enum.GetValues() -metoden.
void loopEnum()
{
var logLevels = Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Använda C# Enum.GetNames() för att enumeratera enum namn som strängar
C# Enum.GetValues() metoden returnerar en matris med enum typer.
Det är därför vi konverterade enum -namn till strängar innan vi skrev ut dem i konsolen.
Med hjälp av C# Enum.GetNames() -metoden kan vi enumeratera enum -namn som strängar, så att det inte är nödvändigt att konvertera dem till strängar.
Om du använder .Net 5 och högre kan du använda den generiska funktionen C# Enum.GetNames().
void loopEnum()
{
string[] logLevels = Enum.GetNames<LogLevel>();
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
I de äldre versionerna måste vi skicka parametern typeof() enum .
void loopEnum()
{
string[] logLevels = Enum.GetNames(typeof(LogLevel));
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Om du vill enumeratera namn som strängar kan du använda C# Enum.GetNames() -metoden.
Användning av Linq
Vi kan använda metoden Linq forEach för att enumeratera C# enum med hjälp av metoderna Enum.GetValues() och Enum.GetNames().
I .Net 5 och högre använder vi nedanstående kodutdrag.
//Using Enum.GetValues
Enum.GetValues<LogLevel>()
.ToList()
.ForEach(loglevel => Console.WriteLine(loglevel.ToString()));
//Using Enum.GetNames
Enum.GetNames<LogLevel>()
.ToList()
.ForEach(loglevel => Console.WriteLine(loglevel));
I äldre versioner
//Using Enum.GetValues
Enum.GetValues(typeof(LogLevel))
.Cast<LogLevel>().ToList()
.ForEach(loglevel => Console.WriteLine(loglevel.ToString()));
//Using Enum.GetNames
Enum.GetNames(typeof(LogLevel))
.ToList()
.ForEach(loglevel => Console.WriteLine(loglevel));
Sammanfattning
I den här handledningen lärde vi oss att enumerate enum i C# med hjälp av Enum.GetValues() och Enum.GetNames().