C\#의 매 거 진 이해(간단명료 하고 알 기 쉽다)

1.매 거 진 것 을 배우 기 전에 먼저 매 거 진 장점 을 들 어 봅 시다.
1.매 거 진 코드 를 더욱 선명 하 게 할 수 있 고 설명 적 인 이름 으로 전체 수 치 를 표시 할 수 있 습 니 다.
2.매 거 진 코드 를 쉽게 유지 하고 변수 에 합 법 적 이 고 기대 하 는 값 을 지정 하 는 데 도움 이 됩 니 다.
3.매 거 진 코드 를 쉽게 입력 합 니 다.
매 거 설명
1.간단 한 매 거
●enum 키 워드 를 사용 하여 클래스 와 같은 등급 으로 설명 합 니 다.매 거 진 자 체 는 수정자 가 있 을 수 있 지만 매 거 진 구성원 은 항상 공공 이 므 로 방문 수정자 가 있 을 수 없다.매 거 진 자체 의 장식 부 호 는 Public 와 internal 만 사용 할 수 있 습 니 다.
●매 거 진 값 형식 입 니 다.System.Enum 에서 암시 적 으로 계승 되 어 수 동 으로 수정 할 수 없습니다.System.Enum 자 체 는 인용 형식 으로 System.ValueType 에서 계승 합 니 다.
●매 거 진 은 모두 암시 적 으로 밀봉 되 어 있 으 며,기류 파 생 자 류 로 서 는 안 된다.
●매 거 진 형식의 매 거 진 구성원 은 모두 정적 이 고 기본 값 은 int 32 형식 입 니 다.
●매 거 진 구성원 마다 관련 된 상수 치 를 가지 고 있다.이 값 의 유형 은 매 거 진 바 텀 데이터 형식 입 니 다.모든 매 거 진 구성원 의 상수 치 는 매 거 진 바 텀 데이터 형식의 범위 안에 있어 야 한다.바 텀 데이터 형식 을 명확 하 게 지정 하지 않 으 면 기본 데이터 형식 은 int 형식 입 니 다.
●매 거 진 멤버 는 같 을 수 없 지만 매 거 진 값 은 같 을 수 있다.
●마지막 멤버 의 쉼표 와 대괄호 뒤의 점 수 는 생략 할 수 있다.
C\#클래스 하 나 를 제공 하여 매 거 진 작업 을 편리 하 게 할 수 있 습 니 다.다음은 이러한 일반적인 방법 을 알려 드 립 니 다.

지정 한 바 텀 데이터 형식 을 표시 하 는 것 은 간단 합 니 다.설명 을 할 때 콜론 을 추가 하고 그 다음 에 지정 할 데이터 형식 을 따라 가 야 합 니 다.

    enum sex : byte  //
    {
        male,
        female,  //
    };        // '
명시 적 으로 매 거 진 구성원 상수 값 을 설정 합 니 다.기본 값 은 0 부터 하나씩 증가 합 니 다.그러나 다음 예 는 1,2,3,4,5,6,7,0 으로 설정 됐다.그리고 멤버 값 은 똑 같 을 수 있어.

    enum Week
    {
        Monday = 1,
        Tuesday = 2,
        Wednesday = 3,
        Sunday = 0,
     Everyday = 1  // ,
    }
  Console.WriteLine((int)Week.Monday);  //
예제,매 거 진 값 으로 매 거 진 이름과 매 거 진 이름 으로 매 거 진 값 을 가 져 옵 니 다.

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Enum.GetName(typeof(Man),1));  // ( )

            string[] array1 = Enum.GetNames(typeof(Man));
            Console.WriteLine(array1[1]);   //

            Array array2 = Enum.GetValues(typeof(Man));
            Console.WriteLine(array2.GetValue(1));  //

            Type t = Enum.GetUnderlyingType(typeof(Man));
            Console.WriteLine(t);       // Int32

            //
            int i = 1;
            string Name = Enum.Parse(typeof(Man), i.ToString()).ToString();     // Name=" "
            Console.WriteLine(Name);

            //
            string Name2 = " ";
            int j = Convert.ToInt32(Enum.Parse(typeof(Man), Name2));     // j=2
            Console.WriteLine(j);

            Console.ReadKey();
        }
    }

    enum Man
    {
        = 1,
        = 2,
        = 3
    }

2.표지 매 거
표지 매 거 는 상단 에[System.Flags]특성 을 추가 하여 성명 해 야 합 니 다.그리고 조합 연산 을 일일이 지원 합 니 다.먼저 예 를 들 어 보 겠 습 니 다.

class Program
    {
        static void Main(string[] args)
        {
            var man = Week. | Week. ;  // 101    001 100, 101
            Console.WriteLine((int)man);
            if ((man & Week. ) == Week. )       //101 man
            {                                    //001 ,
                Console.WriteLine(" ");      //001 , man
            }
            else
            {
                Console.WriteLine(" ");
            }
            Console.ReadKey();
        }
    }

    [System.Flags]
    public enum Week
    {
        = 1,  //001
        = 2,  //010
        = 4,  //100
    }

이러한 비트 연산 은 매우 유용 하 며,sql 구문 에서 도 비트 연산 을 지원 합 니 다.즉,매 거 운 연산 후의 결 과 를 데이터베이스 에 저장 한 후에 도 당신 의 요구 에 따라 읽 을 수 있다 는 것 이다.예 를 들 면:
데이터베이스 와 같은'백미'를 데이터베이스 에 저장 하면 전체 5 에 저장 합 니 다.
그럼 모든'화이트'데이터 목록 을 읽 고 싶 은 데 어떻게 읽 을까요?백,순백'1'일 수도 있 고 백부 3 일 수도 있 고 백미 5 일 수도 있 고 백부 미 7 일 수도 있 습 니 다.인 으로 읽 을 수 있 지만 더 좋 은 방법 은 sql 구문 에서 똑 같이 비트 연산 을 사용 하 는 것 입 니 다.

select * from Table1 where Tag & 1 = 1  //Tag

select * from Table1 where  Tag | 1 = Tag

3.매 거 진 사용 건의
매개 변수,반환 값,변수 등 유형 이 매 거 될 때 매 거 진 을 사용 할 수 있 습 니 다(분류의 안정성 을 고려 해 야 합 니 다)
대부분의 경우 int 형식 을 사용 하여 매 거 할 수 있 으 며,아래 의 경 우 는 제외 합 니 다.
매 거 진 은 대량으로 자주 사 용 될 수 있 습 니 다.이 때 는 공간 을 절약 하기 위해 int 보다 작은 매 거 진 을 사용 할 수 있 습 니 다.
표지 가 매 거 되 고 표지 가 32 개 보다 많다.
다음은 다음 과 같 습 니 다.MVC 3 드 롭 다운 목록 을 연결 하 는 예제 입 니 다.
컨트롤 러 코드:

namespace MvcStart.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult GetSexList()
        {
            Dictionary<string, int> Sexlist = new Dictionary<string, int>();
            string[] keys = Enum.GetNames(typeof(sex));
            Array values = Enum.GetValues(typeof(sex));

            for (int i = 0; i < keys.Length; i++)
            {
                Sexlist.Add(keys[i], (int)values.GetValue(i));
            }

            return View(Sexlist);
        }
    }

    public enum sex
    {
        male = 1,
        female = 2,
        other = 3
    }
}

보기 코드:

@model Dictionary<string, int>
<select>
    @foreach(var item in @Model)
    {
        <option value="@item.Value">@item.Key</option>
    }
</select>
생 성 된 HTML 코드:

<select>
        <option value="1">male</option>
        <option value="2">female</option>
        <option value="3">other</option>
</select>
예 를 들 어 매 거 진 설명 을 가 져 옵 니 다.

public static class GetDescription
    {
        /// <summary>
        ///
        /// </summary>
        /// <param name="en"></param>
        /// <returns></returns>
        public static string description(this Enum en)
        {
            Type type = en.GetType();
            MemberInfo[] memInfo = type.GetMember(en.ToString());
            if (memInfo != null && memInfo.Length > 0)
            {
                object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
                if (attrs != null && attrs.Length > 0)
                    return ((DescriptionAttribute)attrs[0]).Description;
            }
            return en.ToString();
        }
    }

    public enum Sex
    {
        [Description(" ")]
        man = 1,
        [Description(" ")]
        woman = 2,
        [Description(" ")]
        other = 3
    }

좋은 웹페이지 즐겨찾기