Πώς να μετατρέψετε το `int` σε `enum` σε C#


Για να cast int σε enum σε C#, ρητά τύπου cast τη μεταβλητή enum σε integer.

SampleEnum sample = (SampleEnum)IntVariable;

Πίνακας περιεχομένων

Λύση 1: Χρήση ρητής μετατροπής τύπου της μεταβλητής enum

Ας δούμε ένα παράδειγμα για να το κατανοήσουμε καλύτερα.

Έχουμε έναν τύπο enum που ονομάζεται Days, ο οποίος αντιπροσωπεύει τις ημέρες της εβδομάδας που ξεκινούν από τη Δευτέρα.

public enum Days
{
        Monday,  
        Tuesday,  
        Wednesday,  
        Thursday,  
        Friday,  
        Saturday,  
        Sunday
}

int dayInteger = 6;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//Monday

Υπάρχει όμως ένα πρόβλημα με την παραπάνω ** μετατροπή απόint σε enum **.

Τι γίνεται αν η τιμή int δεν υπάρχει στη μεταβλητή C# Enum

int dayInteger = 100;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//100

Δεν θα πετάξει καμία εξαίρεση.

Επομένως, είναι καλύτερο να ελέγξετε αν η τιμή int υπάρχει στο Enum πριν τη μετατροπή της σε ακέραιο αριθμό.

Ελέγξτε αν ένας ακέραιος αριθμός υπάρχει ή όχι στη μεταβλητή enum

Για να πάρουμε όλες τις ακέραιες τιμές στη C# Enum μπορούμε να χρησιμοποιήσουμε τη μέθοδο Enum.GetValues.

Μετατρέψτε τις σε λίστα C#, έτσι ώστε να μπορούμε να χρησιμοποιήσουμε τη μέθοδο list.Contains() για να ελέγξουμε αν ο συγκεκριμένος ακέραιος υπάρχει στη μεταβλητή enum.

var intValue = 100;
var enumValues = Enum.GetValues(typeof(Days)).Cast<int>().ToList();

if(enumValues.Contains(intValue)){
  Console.WriteLine("We can Cast int to Enum");  
   Days day = (Days) intValue;
}else{
  Console.WriteLine("Cannot Cast int to Enum");
}

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο Enum.IsDefined() για να ελέγξουμε αν η μετατρεπόμενη ακέραια τιμή υπάρχει στον δεδομένο τύπο enum.

var enumValue = (Days)1;

if (Enum.IsDefined(typeof(Days), enumValue)){
   Console.WriteLine("The converted int to enum value is",enumValue);
}else{
   Console.WriteLine("Cannot Convert int to Enum",enumValue);
}

Λύση 2: Χρήση της μεθόδου Enum.ToObject()

Μπορούμε να χρησιμοποιήσουμε τη μέθοδο Enum.ToObject(), να μετατρέψουμε την τιμή int σε enum σε C#.

var enumValue = Enum.ToObject(typeof(Days),1);

Console.WriteLine(enumValue);

//Tuesday

Console.WriteLine(enumValue.GetType());
//Days

Avatar
Arunkumar Gudelli

I am One among a million Software engineers of India. I write beautiful markup.I make the Web useful.

Επόμενο
Προηγούμενο