c# सी#में enum से int मूल्य प्राप्त करें




enums casting (20)

मेरे पास Questions (बहुवचन) नामक एक वर्ग है। इस वर्ग में Question (एकवचन) नामक एक enum है जो इस तरह दिखता है।

public enum Question
{
    Role = 2,
    ProjectFunding = 3,
    TotalEmployee = 4,
    NumberOfServers = 5,
    TopBusinessConcern = 6
}

Questions वर्ग में, मेरे पास एक get(int foo) फ़ंक्शन है जो उस foo लिए एक Questions ऑब्जेक्ट देता है। क्या enum से पूर्णांक मान प्राप्त करने का कोई आसान तरीका है, इसलिए मैं Questions.Get(Question.Role) जैसे कुछ कर सकता हूं। Get Questions.Get(Question.Role) ?


चूंकि एनम्स किसी भी अभिन्न प्रकार ( byte , int , short इत्यादि) हो सकते हैं, इसलिए GetTypeCode के अंतर्निहित अभिन्न मूल्य को प्राप्त करने का एक और अधिक मजबूत तरीका Convert क्लास के साथ GetTypeCode विधि का उपयोग करना होगा:

enum Sides {
    Left, Right, Top, Bottom
}
Sides side = Sides.Bottom;

object val = Convert.ChangeType(side, side.GetTypeCode());
Console.WriteLine(val);

यह अंतर्निहित अभिन्न प्रकार के बावजूद काम करना चाहिए।


Enum को int में बदलने के बजाय इसे आज़माएं:

public static class ReturnType
{
    public static readonly int Success = 1;
    public static readonly int Duplicate = 2;
    public static readonly int Error = -1;        
}

विस्तार विधि निम्नलिखित है

public static string ToEnumString<TEnum>(this int enumValue)
        {
            var enumString = enumValue.ToString();
            if (Enum.IsDefined(typeof(TEnum), enumValue))
            {
                enumString = ((TEnum) Enum.ToObject(typeof (TEnum), enumValue)).ToString();
            }
            return enumString;
        }

चूंकि enums को कई आदिम प्रकारों के साथ घोषित किया जा सकता है, इसलिए किसी भी enum प्रकार को कास्ट करने के लिए एक सामान्य विस्तार विधि उपयोगी हो सकती है।

        enum Box
        {
            HEIGHT,
            WIDTH,
            DEPTH
        }

        public static void UseEnum()
        {
            int height = Box.HEIGHT.GetEnumValue<int>();
            int width = Box.WIDTH.GetEnumValue<int>();
            int depth = Box.DEPTH.GetEnumValue<int>();
        }

        public static T GetEnumValue<T>(this object e) => (T)e;

बस enum कास्ट, उदाहरण के लिए

int something = (int) Question.Role;

उपरोक्त जंगली में दिखाई देने वाले विशाल बहुमत के लिए काम करेगा, क्योंकि एक enum के लिए डिफ़ॉल्ट अंतर्निहित प्रकार int

हालांकि, जैसा कि cecilphillip बताता है, enums के विभिन्न अंतर्निहित प्रकार हो सकते हैं। यदि एक enum को एक long , long , या ulong रूप में घोषित किया जाता है, तो इसे enum के प्रकार में डाला जाना चाहिए; उदाहरण के लिए

enum StarsInMilkyWay:long {Sun = 1, V645Centauri = 2 .. Wolf424B = 2147483649};

आपको उपयोग करना चाहिए

long something = (long)StarsInMilkyWay.Wolf424B;

उदाहरण मैं सुझाव देना चाहता हूं कि 'एन' से 'int' मान प्राप्त करें, '

public enum Sample
{Book =1, Pen=2, Pencil =3}

int answer = (int)Sample.Book;

अब जवाब 1 होगा।

मुझे उम्मीद है कि यह किसी की मदद कर सकता है।


Question question = Question.Role;
int value = (int) question;

परिणामस्वरूप value == 2


यह आपके विचार से आसान है - एक enum पहले से ही एक int है। इसे सिर्फ याद दिलाने की जरूरत है:

int y = (int)Question.Role;
Console.WriteLine(y); // prints 2

Int या छोटे enums के साथ मेरा एफएवी हैक:

GetHashCode();

एक enum के लिए

public enum Test
{
    Min = Int32.MinValue,
    One = 1,
    Max = Int32.MaxValue,
}

इस

var values = Enum.GetValues(typeof(Test));

foreach (var val in values) 
{
    Console.WriteLine(val.GetHashCode());
    Console.WriteLine(((int)val));
    Console.WriteLine(val);
}

आउटपुट

one
1
1  
max
2147483647
2147483647    
min
-2147483648
-2147483648    

अस्वीकरण: लंबे समय के आधार पर enums के लिए काम नहीं करता है


वीबी में यह होना चाहिए

Public Enum Question
    Role = 2
    ProjectFunding = 3
    TotalEmployee = 4
    NumberOfServers = 5
    TopBusinessConcern = 6
End Enum

Private value As Integer = CInt(Question.Role)

उदाहरण:

Public Enum EmpNo
{
    Raj = 1
    Rahul,
    Priyanka
}

और enum मान प्राप्त करने के लिए पीछे कोड में:

int setempNo = (int)EmpNo.Raj; //This will give setempNo = 1

या

int setempNo = (int)EmpNo.Rahul; //This will give setempNo = 2

Enums 1 से बढ़ेगा, और आप प्रारंभ मूल्य सेट कर सकते हैं। अन्यथा इसे शुरुआत में 0 के रूप में असाइन किया जाएगा।


यदि आप एक चर में संग्रहीत एनम मान के लिए एक पूर्णांक प्राप्त करना चाहते हैं, तो टाइप विधि होगी, उदाहरण के लिए विधि में उपयोग करने के लिए, आप बस ऐसा कर सकते हैं जिसे मैंने इस उदाहरण में लिखा था:

enum Talen
{
    Engels = 1, Italiaans = 2, Portugees = 3, Nederlands = 4, Duits = 5, Dens = 6
}

Talen Geselecteerd;    

public void Form1()
{
    InitializeComponent()
    Geselecteerd = Talen.Nederlands;
}

// You can use the Enum type as a parameter, so any enumeration from any enumerator can be used as parameter
void VeranderenTitel(Enum e)
{
    this.Text = Convert.ToInt32(e).ToString();
}

यह विंडो शीर्षक को 4 में बदल देगा क्योंकि परिवर्तनीय Geselecteerd Talen.Nederlands । अगर मैं इसे Talen.Portugees और विधि को फिर से कॉल करता Talen.Portugees , तो टेक्स्ट 3 में बदल जाएगा।

मुझे इंटरनेट पर इस सरल समाधान को खोजने में कठिनाई हुई और मुझे यह नहीं मिला, इसलिए मैं कुछ परीक्षण कर रहा था और इसे पाया। उम्मीद है की यह मदद करेगा। ;)


यह सुनिश्चित करने के लिए कि enum value मौजूद है और फिर इसे पार्स करें, आप निम्न कार्य भी कर सकते हैं।

// Fake Day of Week
string strDOWFake = "SuperDay";
// Real Day of Week
string strDOWReal = "Friday";
// Will hold which ever is the real DOW.
DayOfWeek enmDOW;

// See if fake DOW is defined in the DayOfWeek enumeration.
if (Enum.IsDefined(typeof(DayOfWeek), strDOWFake))
{
// This will never be reached since "SuperDay" 
// doesn't exist in the DayOfWeek enumeration.
    enmDOW = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), strDOWFake);
}
// See if real DOW is defined in the DayOfWeek enumeration.
else if (Enum.IsDefined(typeof(DayOfWeek), strDOWReal))
{
    // This will parse the string into it's corresponding DOW enum object.
    enmDOW = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), strDOWReal);
}

// Can now use the DOW enum object.
Console.Write("Today is " + enmDOW.ToString() + ".");

आशा है कि ये आपकी मदद करेगा।


सबसे आसान समाधान जो मैं सोच सकता हूं, इस तरह Get(int) विधि अधिभारित कर रहा है:

[modifiers] Questions Get(Question q)
{
    return Get((int)q);
}

जहां [modifiers] आमतौर पर Get(int) विधि के लिए समान हो सकता है। यदि आप Questions वर्ग को संपादित नहीं कर सकते हैं या किसी कारण से नहीं चाहते हैं, तो आप एक्सटेंशन लिखकर विधि को अधिभारित कर सकते हैं:

public static class Extensions
{
    public static Questions Get(this Questions qs, Question q)
    {
        return qs.Get((int)q);
    }
}

int number = Question.Role.GetHashCode();

number मूल्य 2 होना चाहिए।


संबंधित नोट पर, यदि आप System.Enum से int मान प्राप्त करना चाहते हैं, तो यहां दिया गया है:

Enum e = Question.Role;

आप उपयोग कर सकते हैं:

int i = Convert.ToInt32(e);
int i = (int)(object)e;
int i = (int)Enum.Parse(e.GetType(), e.ToString());
int i = (int)Enum.ToObject(e.GetType(), e);

आखिरी दो सादे बदसूरत हैं। मैं पहले को पसंद करता हूं।


इसे सार्वजनिक स्थिरांक वाले स्थिर वर्ग के रूप में घोषित करें:

public static class Question
{
    public const int Role = 2;
    public const int ProjectFunding = 3;
    public const int TotalEmployee = 4;
    public const int NumberOfServers = 5;
    public const int TopBusinessConcern = 6;
}

और फिर आप इसे Question.Role रूप में संदर्भित कर सकते हैं। Question.Role , और यह हमेशा एक int या जो भी आप इसे परिभाषित करते हैं उसका मूल्यांकन करता है।


आप अपने परिभाषित एनम प्रकार के लिए एक्सटेंशन विधि लागू करके ऐसा कर सकते हैं:

public static class MyExtensions
{
    public static int getNumberValue(this Question questionThis)
    {
        return (int)questionThis;
    }
}

यह मौजूदा enum मान के int मान प्राप्त करने में आसान बनाता है:

Question question = Question.Role;
int value = question.getNumberValue();

या

int value = Question.Role.getNumberValue();

ऐसा करने का एक और तरीका:

Console.WriteLine("Name: {0}, Value: {0:D}", Question.Role);

में परिणाम होगा:

Name: Role, Value: 2

इसे इस्तेमाल करे :

int value = YourEnum.ToString("D");




int