Πώς να enumerate C# enum
Τα Enums χρησιμοποιούνται ευρέως στη γλώσσα C#
.
Και υπάρχουν 4 τρόποι για να enumerate enum στο C#
.
- Χρήση του
C# Enum.GetValues()
σε .Net 5 και άνω. - Χρήση του
C# Enum.GetValues()
σε παλαιότερες εκδόσεις .Net. - Χρήση του
C# Enum.GetNames()
για να enumerate enum ονόματα ως συμβολοσειρές. - Χρήση του
Linq
Ας δούμε ένα παράδειγμα για να το κατανοήσουμε καλύτερα.
Πρώτα θα δημιουργήσουμε μια C# enum
public enum LogLevel
{
ERROR,
WARN,
INFO,
DEBUG
}
Το enum
αντιπροσωπεύει διαφορετικούς τύπους επιπέδων καταγραφής.
Τώρα θα δούμε διαφορετικούς τρόπους για να enumerate the C# enum
.
Χρήση της μεθόδου C# Enum.GetValues()
Generic σε .Net 5 και άνω
Εάν χρησιμοποιείτε την τελευταία έκδοση του .Net
, δηλαδή το .Net 5
και άνω, μπορείτε να χρησιμοποιήσετε τη γενική έκδοση για τη μέθοδο Enum.GetValues
για να enumerate το C# enum
.
void loopEnum()
{
LogLevel[] logLevels = Enum.GetValues<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Η νέα γενική έκδοση του Enum.GetValues
επιστρέφει τον πίνακα τιμών enum.
Και επιπλέον μπορούμε να χρησιμοποιήσουμε τις εντολές for
ή foreach
για να παραθέσουμε τις C# enum
ονόματα.
Καθώς ο πίνακας περιέχει τα enum
τύπο, πρέπει να τον μετατρέψουμε σε συμβολοσειρά χρησιμοποιώντας τη μέθοδο ToString()
.
Χρήση της μεθόδου C# Enum.GetValues()
σε παλαιότερες εκδόσεις .Net.
Στις παλαιότερες εκδόσεις του .Net
δεν υπάρχει διαθέσιμη γενική μέθοδος για τη μέθοδο Enum.GetValues()
.
Πρέπει να περάσετε το typeof()
enum ως παράμετρο στη μέθοδο Enum.GetValues()
.
Array logLevels = Enum.GetValues(typeof(LogLevel))
Και αυτή επιστρέφει enum τιμές τύπου System.Array
και επιπλέον μπορούμε να χρησιμοποιήσουμε την εντολή foreach
για να διατρέξουμε με βρόχο τις C# enum
names.
void loopEnum()
{
Array logLevels = Enum.GetValues(typeof(LogLevel))
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Αν θέλετε το αποτέλεσμα IEnumerable
, μπορούμε να χρησιμοποιήσουμε περαιτέρω τη μέθοδο Enum.GetValues()
.
void loopEnum()
{
var logLevels = Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>();
foreach (LogLevel logLevel in logLevels)
{
Console.WriteLine(logLevel.ToString());
}
}
Χρήση του C# Enum.GetNames()
για να enumerate enum ονόματα ως συμβολοσειρές
C# Enum.GetValues()
η μέθοδος επιστρέφει πίνακα τύπων enum.
Γι’ αυτό μετατρέψαμε τα ονόματα enum σε συμβολοσειρά πριν τα εκτυπώσουμε στην κονσόλα.
Χρησιμοποιώντας τη μέθοδο C# Enum.GetNames()
μπορούμε να enumerate enum ονόματα ως συμβολοσειρές, έτσι ώστε να μην απαιτείται η μετατροπή τους σε συμβολοσειρές.
Εάν χρησιμοποιείτε το .Net 5
και άνω, μπορείτε να χρησιμοποιήσετε τη γενική συνάρτηση C# Enum.GetNames()
.
void loopEnum()
{
string[] logLevels = Enum.GetNames<LogLevel>();
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Στις παλαιότερες εκδόσεις πρέπει να περάσετε την παράμετρο typeof()
enum .
void loopEnum()
{
string[] logLevels = Enum.GetNames(typeof(LogLevel));
foreach (string logLevel in logLevels)
{
Console.WriteLine(logLevel);
}
}
Έτσι, αν θέλετε να enumerate ονόματα ως συμβολοσειρές μπορούμε να χρησιμοποιήσουμε τη μέθοδο C# Enum.GetNames()
.
Χρησιμοποιώντας την Linq
Μπορούμε να χρησιμοποιήσουμε τη μέθοδο Linq forEach
για να enumerate C# enum, με τη βοήθεια των μεθόδων Enum.GetValues()
και Enum.GetNames()
.
Στο .Net 5
και πάνω χρησιμοποιήστε το παρακάτω απόσπασμα κώδικα.
//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));
Στις παλαιότερες εκδόσεις
//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));
Περίληψη
Σε αυτό το σεμινάριο μάθαμε να enumerate enum σε C# χρησιμοποιώντας τις μεθόδους Enum.GetValues()
και Enum.GetNames()
.