유니티 - 가치에서 C#열거 형 설명을 얻는 방법?




유니티 enum (4)

가능한 중복 :
Enum 값의 속성 가져 오기

이 같은 설명 특성 가진 열거 형 :

public enum MyEnum
{
    Name1 = 1,
    [Description("Here is another")]
    HereIsAnother = 2,
    [Description("Last one")]
    LastOne = 3
}

열거 형을 기반으로 설명을 검색하기위한이 코드가 있음을 발견했습니다.

public static string GetEnumDescription(Enum value)
{
    FieldInfo fi = value.GetType().GetField(value.ToString());

    DescriptionAttribute[] attributes =
        (DescriptionAttribute[])fi.GetCustomAttributes(
        typeof(DescriptionAttribute),
        false);

    if (attributes != null &&
        attributes.Length > 0)
        return attributes[0].Description;
    else
        return value.ToString();
}

이렇게하면 다음과 같은 코드를 작성할 수 있습니다.

var myEnumDescriptions = from MyEnum n in Enum.GetValues(typeof(MyEnum))
                         select new { ID = (int)n, Name = Enumerations.GetEnumDescription(n) };

내가 원하는 것은 열거 형 값 (예 : 1)을 알고있는 경우입니다. 설명을 검색하려면 어떻게해야합니까? 즉, 어떻게 정수를 "Enum 값"으로 변환하여 GetDescription 메서드로 전달할 수 있습니까?


나는 일반적인 확장 메소드에서 수용된 답안으로부터 코드를 모아서 모든 종류의 객체에 사용할 수있다.

public static string DescriptionAttr<T>(this T source)
{
    FieldInfo fi = source.GetType().GetField(source.ToString());

    DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(
        typeof(DescriptionAttribute), false);

    if (attributes != null && attributes.Length > 0) return attributes[0].Description;
    else return source.ToString();
}

원래 게시물이나 열거 형을 사용하여 속성이 Description 속성으로 장식 된 다른 클래스를 사용하면 다음과 같이 코드를 사용할 수 있습니다.

string enumDesc = MyEnum.HereIsAnother.DescriptionAttr();
string classDesc = myInstance.SomeProperty.DescriptionAttr();

이것을보다 쉽게 ​​사용할 수 있도록 일반 확장을 작성했습니다.

public static string ToDescription<TEnum>(this TEnum EnumValue) where TEnum : struct
{
    return Enumerations.GetEnumDescription((Enum)(object)((TEnum)EnumValue));
}

이제 다음과 같이 쓸 수 있습니다.

        MyEnum my = MyEnum.HereIsAnother;
        string description = my.ToDescription();
        System.Diagnostics.Debug.Print(description);

참고 : 위의 "열거 형"을 클래스 이름으로 바꿉니다.


Unconstrained Melody 에서 일반적이고 형식이 안전한 방식으로 구현했습니다. 다음을 사용합니다.

string description = Enums.GetDescription((MyEnum)value);

이:

  • 값이 실제 enum 값임을 보장합니다 (제네릭 형식 제약 조건 포함).
  • 현재 솔루션에서 권투를 피하십시오
  • 모든 설명을 캐싱하여 모든 통화에서 리플렉션을 사용하지 않도록합니다.
  • 설명에서 값을 파싱하는 기능을 포함하여 다른 방법이 많이 있습니다.

핵심 답변은 int 에서 MyEnum 캐스팅 한 MyEnum 만 열거 형 작업을 많이한다면 MyEnum 되지 않은 멜로디를 사용하는 것에 대한 가치가 있습니다. :)


int value = 1;
string description = Enumerations.GetEnumDescription((MyEnum)value);

C #에서 enum 형의 기본 기본 데이터 형식은 int 이며, 단지 캐스팅 할 수 있습니다.





enums