IT story

열거 형을 목록으로 변환

hot-time 2020. 9. 13. 11:48
반응형

열거 형을 목록으로 변환


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

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

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


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

Enum.GetNames(typeof(DataSourceTypes))

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

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

다른 솔루션을 추가하고 싶습니다. 제 경우에는 드롭 다운 버튼 목록 항목에서 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();
        */

    }

참고 URL : https://stackoverflow.com/questions/14971631/convert-an-enum-to-liststring

반응형