Chuyển đổi một enum thành List <string>


102

Làm cách nào để chuyển Enum sau thành Danh sách các chuỗi?

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

Tôi không thể tìm thấy câu hỏi chính xác này, Enum to List này là câu hỏi gần nhất nhưng tôi đặc biệt muốnList<string>

Câu trả lời:


177

Sử dụng Enumphương thức tĩnh của , GetNames. Nó trả về một string[], như vậy:

Enum.GetNames(typeof(DataSourceTypes))

Nếu bạn muốn tạo một phương thức chỉ thực hiện điều này cho chỉ một kiểu enumvà cũng chuyển đổi mảng đó thành a List, bạn có thể viết như sau:

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

Bạn sẽ cần Using System.Linq;ở đầu lớp của mình để sử dụng .ToList ()


7
@DCShannon vui lòng không chỉnh sửa các câu hỏi / câu trả lời phổ biến và thu nhỏ phần giải thích. Mặc dù bạn và tôi hiểu mã tốc ký, nhưng người mới sử dụng cần tất cả các chi tiết bổ sung để liên kết nó với những gì họ đã học .
Jeremy Thompson

Có vẻ như Enum.GetNames(typeof(DataSourceTypes))trả về một chung System.Arraythay vì một mảng chuỗi?
sookie

@sookie, xem link MSDN, đây là chữ ký của người GetNames () phương pháp:public static string[] GetNames
Jeremy Thompson

30

Tôi muốn thêm một giải pháp khác: Trong trường hợp của tôi, tôi cần sử dụng nhóm Enum trong các mục danh sách nút thả xuống. Vì vậy, họ có thể có không gian, tức là cần có nhiều mô tả thân thiện với người dùng hơn:

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

Trong một lớp người trợ giúp (HelperMethods), tôi đã tạo phương thức sau:

 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();
    }

Khi bạn gọi người trợ giúp này, bạn sẽ nhận được danh sách mô tả mục.

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

BỔ SUNG: Trong mọi trường hợp, nếu bạn muốn thực hiện phương pháp này, bạn cần: Phần mở rộng GetDescription cho enum. Đây là những gì tôi sử dụng.

 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();
        */

    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.