[c#] C #의 열거 형에서 int 값 가져 오기

Questions(복수) 라는 수업이 있습니다 . 이 클래스에는 Question(단일) 이라는 열거 형 이 있습니다.

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

Questions클래스 에는 해당 객체를 get(int foo)반환하는 함수 Questionsfoo있습니다. 열거 형에서 정수 값을 얻는 쉬운 방법이 Questions.Get(Question.Role)있습니까? 그래서 이런 식으로 할 수 있습니까?



답변

열거 형을 캐스팅하십시오.

int something = (int) Question.Role;

위의 열거 형의 기본 기본 유형은이므로 야생에서 볼 수있는 대다수의 열거 형에서 작동합니다 int.

그러나 cecilphillip이 지적했듯이 열거 형은 다른 기본 유형을 가질 수 있습니다. 열거가 선언 된 경우 uint, long또는 ulong, 그것은 열거의 형식으로 캐스팅해야한다; 예를 들어

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

당신은 사용해야합니다

long something = (long)StarsInMilkyWay.Wolf424B;


답변

모든 열거 형 일체형이 될 수 있기 때문에 ( byte, int, short등), 열거의 기본 적분 값을 얻을 수있는 더 강력한 방법이 사용하게 될 GetTypeCode와 함께 방법 Convert분류 :

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

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

기본 정수 유형에 관계없이 작동해야합니다.


답변

공용 상수를 갖는 정적 클래스로 선언하십시오.

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있으며 항상 int정의한대로 평가합니다 .


답변

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

결과입니다 value == 2.


답변

관련 메모에서에서 int값 을 얻으려면 여기에 System.Enum제공 e하십시오.

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

마지막 두 가지는 추악합니다. 나는 첫 번째를 선호합니다.


답변

생각보다 쉽습니다. 열거 형은 이미 정수입니다. 그냥 상기 시켜줘야합니다.

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


답변

예:

public Enum EmpNo
{
    Raj = 1,
    Rahul,
    Priyanka
}

그리고 코드 뒤에서 열거 형 값을 얻으십시오.

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

또는

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

열거 형이 1 씩 증가하고 시작 값을 설정할 수 있습니다. 시작 값을 설정하지 않으면 처음에 0으로 할당됩니다.