Pertanyaan Dapatkan nilai int dari enum di C #


Saya memiliki kelas yang disebut Questions (jamak). Di kelas ini ada enum yang disebut Question (tunggal) yang terlihat seperti ini.

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

Dalam Questions kelas, saya punya get(int foo) fungsi yang mengembalikan a Questions keberatan untuk itu foo. Apakah ada cara mudah untuk mendapatkan nilai integer dari enum sehingga saya bisa melakukan sesuatu seperti Questions.Get(Question.Role)?


1367
2018-06-03 06:46


asal


Jawaban:


Hanya mentransmisikan enum, mis.

int something = (int) Question.Role;

Di atas akan bekerja untuk sebagian besar enum yang Anda lihat di alam liar, sebagai tipe dasar default untuk enum int.

Namun, seperti cecilphillip menunjukkan, enum dapat memiliki tipe dasar yang berbeda. Jika enum dinyatakan sebagai uint, long, atau ulong, harus dilemparkan ke jenis enum; misalnya untuk

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

kamu harus menggunakan

long something = (long)StarsInMilkyWay.Wolf424B;

1795
2018-06-03 06:49



Karena Enum dapat menjadi tipe integral apa pun (byte, int, short, dll.), cara yang lebih kuat untuk mendapatkan nilai integral yang mendasar dari enum adalah memanfaatkan GetTypeCode metode dalam hubungannya dengan Convert kelas:

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

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

Ini harus bekerja terlepas dari tipe integral yang mendasarinya.


237
2017-07-09 14:54



Deklarasikan sebagai kelas statis yang memiliki konstanta publik:

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;
}

Dan kemudian Anda bisa merujuknya sebagai Question.Role, dan selalu mengevaluasi ke int atau apa pun yang Anda definisikan sebagai.


162
2018-06-15 19:28



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

Akan menghasilkan value == 2.


72
2018-06-03 06:48



Pada catatan terkait, jika Anda ingin mendapatkan int nilai dari System.Enum, lalu diberikan e sini:

Enum e = Question.Role;

Kamu dapat memakai:

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);

Dua yang terakhir sangat jelek. Saya lebih suka yang pertama.


54
2017-12-01 08:47



Lebih mudah dari yang Anda pikirkan - enum sudah menjadi int. Itu hanya perlu diingatkan:

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

30
2018-06-03 06:51



Contoh:

Public Enum EmpNo
{
    Raj = 1
    Rahul,
    Priyanka
}

Dan dalam kode di belakang untuk mendapatkan nilai enum:

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

atau

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

Enum akan bertambah 1, dan Anda dapat mengatur nilai awal. Lain itu akan ditugaskan sebagai 0 awalnya.


22
2017-09-25 10:43