VisualStudio/C#

[C#] Enum타입 리플렉션(Reflection)사용하여 값 받아오는 방법

usingsystem 2023. 2. 16. 09:03
728x90

1. Enum 정의

// Enum 타입 정의
enum TestEnum
{
    test1, // 0
    test2, // 1
    test3  // 2
}

2. Enum 값 -> 문자열 (Enum.GetName)

    • Enum.GetName 메서드를 사용하여 Enum 값에 해당하는 이름을 문자열로 가져옵니다.
    • 첫 번째 매개변수: typeof(YourEnumType)
    • 두 번째 매개변수: Enum 값 또는 정수 값.
using System;

class Program
{
    static void Main()
    {
        // Enum 값 -> 문자열
        string name1 = Enum.GetName(typeof(TestEnum), 0); // 정수값 0의 이름
        string name2 = Enum.GetName(typeof(TestEnum), TestEnum.test1); // Enum 값

        Console.WriteLine($"name1: {name1}, name2: {name2}"); // 출력: name1: test1, name2: test1
    }
}

3. Enum 값 -> 문자열 배열 (Enum.GetNames)

  • Enum.GetNames 메서드는 Enum에 정의된 모든 이름을 배열로 반환합니다.
using System;

class Program
{
    static void Main()
    {
        // Enum 값 -> 문자열 배열
        string[] names = Enum.GetNames(typeof(TestEnum));

        // 모든 이름 출력
        foreach (string name in names)
        {
            Console.Write($"{name}, ");
        }
        // 출력: test1, test2, test3,
    }
}

4. 문자열 -> Enum 값 (Enum.Parse)

  • Enum.Parse 메서드를 사용하여 문자열을 Enum 값으로 변환합니다.
  • 주의: 입력 문자열은 대소문자 구분 없이 사용할 수 있습니다.
using System;

class Program
{
    static void Main()
    {
        // 문자열 -> Enum
        TestEnum myenum1 = (TestEnum)Enum.Parse(typeof(TestEnum), "test1");

        // Enum 값을 정수로 출력
        Console.WriteLine((int)myenum1); // 출력: 0
    }
}

5. 문자열 -> Enum 값 (일반화된 메서드)

  • 일반화된 메서드를 작성하여 다양한 Enum 타입에서 사용할 수 있도록 확장합니다.
using System;

class Program
{
    static void Main()
    {
        // 문자열 -> Enum (제네릭 메서드 사용)
        TestEnum myenum2 = StringToEnum<TestEnum>("test1");

        // Enum 값을 정수로 출력
        Console.WriteLine((int)myenum2); // 출력: 0
    }

    // 문자열을 Enum 값으로 변환하는 일반화 메서드
    public static T StringToEnum<T>(string value) where T : Enum
    {
        return (T)Enum.Parse(typeof(T), value);
    }
}

 

6. 추가: Enum 값 -> 숫자 값

  • Enum 값을 정수로 변환하려면 (int)를 사용합니다.
using System;

class Program
{
    static void Main()
    {
        TestEnum myEnum = TestEnum.test2;

        // Enum -> 정수
        int value = (int)myEnum;
        Console.WriteLine($"Enum 값: {myEnum}, 정수 값: {value}"); // 출력: Enum 값: test2, 정수 값: 1
    }
}

 

728x90