แปลง enum เป็น List <string>


105

ฉันจะแปลง Enum ต่อไปนี้เป็นรายการสตริงได้อย่างไร

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

ฉันไม่พบคำถามที่แน่นอนนี้Enum to Listนี้ใกล้เคียงที่สุด แต่ฉันต้องการเป็นพิเศษList<string>

คำตอบ:


182

ใช้Enumวิธีการคงที่, GetNames. มันส่งกลับ a string[]เช่น:

Enum.GetNames(typeof(DataSourceTypes))

หากคุณต้องการสร้างเมธอดที่ทำสิ่งนี้ได้เพียงประเภทเดียวenumและยังแปลงอาร์เรย์นั้นเป็น a Listคุณสามารถเขียนดังนี้:

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

คุณจะต้องUsing System.Linq;อยู่ด้านบนสุดของชั้นเรียนเพื่อใช้ .oList ()


7
@DCShannon โปรดอย่าแก้ไขคำถาม / คำตอบยอดนิยมและคำอธิบายย่อ ในขณะที่คุณและผมเข้าใจรหัสชวเลขของมือใหม่ต้องทุกรายละเอียดเป็นพิเศษในการเชื่อมโยงกับพวกเขาเรียนรู้
Jeremy Thompson

ดูเหมือนว่าEnum.GetNames(typeof(DataSourceTypes))ส่งคืนทั่วไปSystem.Arrayแทนที่จะเป็นสตริงอาร์เรย์?
sookie

@sookie ดูลิงก์ msdn นี่คือลายเซ็นของเมธอด GetNames () :public static string[] GetNames
Jeremy Thompson

31

ฉันต้องการเพิ่มโซลูชันอื่น: ในกรณีของฉันฉันต้องใช้กลุ่ม 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>();

เพิ่มเติม: ในกรณีใด ๆ หากคุณต้องการใช้วิธีนี้คุณต้อง: ส่วนขยาย GetDescription สำหรับ enum นี่คือสิ่งที่ฉันใช้

 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.