열거 형을 List <string>으로 변환


102

다음 Enum을 문자열 목록으로 어떻게 변환합니까?

[Flags]
public enum DataSourceTypes
{
    None = 0,
    Grid = 1,
    ExcelFile = 2,
    ODBC = 4
};

이 정확한 질문을 찾을 수 없습니다.이 Enum to List 가 가장 가깝지만 특별히 원합니다.List<string>

답변:


177

사용 Enum의 정적 방법 GetNames. 다음 string[]과 같이를 반환합니다 .

Enum.GetNames(typeof(DataSourceTypes))

한 가지 유형에 대해서만이 작업을 수행 enum하고 해당 배열을으로 변환 하는 메서드를 만들려면 List다음과 같이 작성할 수 있습니다.

public List<string> GetDataSourceTypes()
{
    return Enum.GetNames(typeof(DataSourceTypes)).ToList();
}

Using System.Linq;.ToList ()를 사용하려면 클래스 맨 위에 있어야합니다 .


7
@DCShannon은 인기있는 질문 / 답변을 편집하거나 설명을 축소하지 마십시오. 당신과 내가 속기 코드를 이해하는 동안, 초보자는 그것을 그들의 학습연관 시키기 위해 모든 추가 세부 사항이 필요합니다 .
Jeremy Thompson

문자열 배열 대신 Enum.GetNames(typeof(DataSourceTypes))제네릭을 반환하는 것 같습니다 System.Array.
sookie

@sookie, msdn 링크 참조, 이것은 GetNames () 메서드 의 서명입니다 .public static string[] GetNames
Jeremy Thompson

30

다른 솔루션을 추가하고 싶습니다. 제 경우에는 드롭 다운 버튼 목록 항목에서 Enum 그룹을 사용해야합니다. 따라서 공간이있을 수 있습니다. 즉,보다 사용자 친화적 인 설명이 필요합니다.

  public enum CancelReasonsEnum
{
    [Description("In rush")]
    InRush,
    [Description("Need more coffee")]
    NeedMoreCoffee,
    [Description("Call me back in 5 minutes!")]
    In5Minutes
}

도우미 클래스 (HelperMethods)에서 다음 메서드를 만들었습니다.

 public static List<string> GetListOfDescription<T>() where T : struct
    {
        Type t = typeof(T);
        return !t.IsEnum ? null : Enum.GetValues(t).Cast<Enum>().Select(x => x.GetDescription()).ToList();
    }

이 도우미를 호출하면 항목 설명 목록이 표시됩니다.

 List<string> items = HelperMethods.GetListOfDescription<CancelReasonEnum>();

추가 : 어쨌든이 메서드를 구현하려면 enum에 대한 : GetDescription 확장이 필요합니다. 이것이 내가 사용하는 것입니다.

 public static string GetDescription(this Enum value)
    {
        Type type = value.GetType();
        string name = Enum.GetName(type, value);
        if (name != null)
        {
            FieldInfo field = type.GetField(name);
            if (field != null)
            {
                DescriptionAttribute attr =Attribute.GetCustomAttribute(field,typeof(DescriptionAttribute)) as DescriptionAttribute;
                if (attr != null)
                {
                    return attr.Description;
                }
            }
        }
        return null;
        /* how to use
            MyEnum x = MyEnum.NeedMoreCoffee;
            string description = x.GetDescription();
        */

    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.