2 τρόποι μετατροπής/μετατροπής int σε enum σε C#
Υπάρχουν 2 τρόποι για να μετατρέψετε ή να ρίξετε το int
σε enum
σε C#
- Χρησιμοποιώντας ρητή χύτευση τύπου της C#.
- Χρήση της μεθόδου
Enum.ToObject()
On this page
Λύση 1: Χρήση ρητής διανομής τύπου C#
Ο απλός τρόπος μετατροπής του int
σε enum
στη C# είναι η χρήση ρητής χύτευσης τύπου.
Ας δούμε ένα παράδειγμα για να το κατανοήσουμε καλύτερα.
Έχουμε ένα enum
τύπο που ονομάζεται LogLevel
, ο οποίος αντιπροσωπεύει διαφορετικά επίπεδα καταγραφής.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Το ρητό casting γίνεται με την τοποθέτηση του enum
τύπου σε παρένθεση μπροστά από την τιμή int
.
Αλλά υπάρχει ένα πρόβλημα με το παραπάνω C# int
σε enum
μετατροπή.
Τι γίνεται αν η τιμή int
δεν υπάρχει στη μεταβλητή C# Enum
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Δεν θα πετάξει καμία εξαίρεση.
Επομένως, είναι προτιμότερο να ελέγξετε αν η τιμή int
υπάρχει στο C# Enum
πριν τη μετατροπή της σε ακέραιο αριθμό.
Ελέγξτε αν ένας ακέραιος αριθμός υπάρχει ή όχι στο C# enum
μεταβλητή
Για να πάρουμε όλες τις ακέραιες τιμές στο C# Enum
μπορούμε να χρησιμοποιήσουμε τη μέθοδο Enum.GetValues
.
Μετατρέψτε τις σε λίστα C#
, ώστε να μπορούμε να χρησιμοποιήσουμε τη μέθοδο list.Contains()
για να ελέγξουμε αν ο συγκεκριμένος ακέραιος υπάρχει στη enum
μεταβλητή.
var intValue = 100;
var enumValues = Enum.GetValues(typeof(LogLevel)).Cast<int>().ToList();
if(enumValues.Contains(intValue)){
Console.WriteLine("We can Cast C# int to Enum");
LogLevel loggingValue = (LogLevel) intValue;
}else{
Console.WriteLine("Cannot Cast C# int to Enum");
}
Μπορούμε να χρησιμοποιήσουμε τη μέθοδο Enum.IsDefined()
για να ελέγξουμε αν η μετατρεπόμενη ακέραια τιμή υπάρχει στη δεδομένη enum
τύπο.
var enumValue = (LogLevel)1;
if (Enum.IsDefined(typeof(LogLevel), enumValue)){
Console.WriteLine("The converted int to enum value is",enumValue);
}else{
Console.WriteLine("Cannot Convert int to Enum",enumValue);
}
Λύση 2: Χρήση της μεθόδου Enum.ToObject()
Μπορούμε να χρησιμοποιήσουμε τη μέθοδο C# Enum.ToObject()
, μετατρέποντας την τιμή int
σε enum
σε C#.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel