Enum 기본 사용

public Enum WeekDays
{
   Monday = 1,
   Tuesday = 2,
   Wednesday = 3,
   Thursday = 4,
   Friday = 5,
   Saturday = 6,
   Sunday = 7
}
...
Public void Main()
{
    // WeekDays라는 Enum에서 '3'이라는 값을 가진 항목의 이름을 반환
    string DayName = Enum.GetName(typeof(WeekDays), 3);  // ==> "Wednesday"가 반환됨.

    // WeekDays라는 Enum에서 이름이 "Sunday"인 항목에 해당하는 숫자값 반환
    string strName = "Sunday";
    int DayOrdinal1 = (int)Enum.Parse(typeof(WeekDays), strName); // ==> 숫자 7이 반환됨.

    // 만일 요일의 이름이 "Sunday"라는 것을 이미 알고 있다면, 다음과 같이 "Sunday"인 항목에 해당하는 숫자값 반환
    int DayOrdianl2 = (int)WeekDays.Sunday; // ==> 숫자 7이 반환됨

}

Attribute

Description


using System.ComponentModel;

enum Services
{
	[Description("System1")]
	System1,
	[Description("System2")]
	System2
}
public static class EnumHelper
{
    /// <summary>
    /// Enum타입의 Description을 가져온다.
    /// 정의되지 않았을 경우 enum의 String을 가져온다.
    /// </summary>
    /// <param name="en">Description을 가져올 Enum</param>
    /// <returns>Description 또는 Enum.ToString()</returns>
    public static string GetDescription(Enum en)
    {
        Type type = en.GetType();

        MemberInfo[] memInfo = type.GetMember(en.ToString());

        if (memInfo != null && memInfo.Length > 0)
        {
            //해당 text 값을 배열로 추출해 옵니다.
            object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (attrs != null && attrs.Length > 0)
            {
                return ((DescriptionAttribute)attrs[0]).Description;
            }
        }
        return en.ToString();
    }
}

[Enum]C# Enum에서 Value / Name 가져오기

[C#] 열거형 Enum과 string,int 형변환 방법

Flags


상태가 하나가아니라 여러개라면 Flags Attribute를 사용하는게 좋다.

비트 플래그를 사용하기 때문에 일반적으로는 아래처럼 2의 제곱수로 적어준다.

[Flags]
public enum MachineState
{
    None = 0,
    Idle = 1,       // 대기 상태
    Inspecting = 2, // 검사 중
    Error = 4,      // 오류 발생
    Paused = 8      // 일시 정지
}

// 사용 예시
MachineState state = MachineState.Inspecting | MachineState.Error;

// 특정 상태인지 확인
bool isInspecting = (state & MachineState.Inspecting) != 0; // true
bool hasError = (state & MachineState.Error) != 0; // true