Làm thế nào để lấy một mảng tất cả các giá trị enum trong C #?


91

Tôi có một enum mà tôi muốn hiển thị tất cả các giá trị có thể có. Có cách nào để lấy một mảng hoặc danh sách tất cả các giá trị có thể có của enum thay vì tạo một danh sách như vậy theo cách thủ công không? ví dụ: Nếu tôi có một enum:

public enum Enumnum { TypeA, TypeB, TypeC, TypeD }

làm thế nào để tôi có thể lấy được một List<Enumnum>cái có chứa { TypeA, TypeB, TypeC, TypeD }?


Câu trả lời:


162

Điều này giúp bạn có một mảng đơn giản gồm các giá trị enum bằng cách sử dụng Enum.GetValues:

var valuesAsArray = Enum.GetValues(typeof(Enumnum));

Và điều này giúp bạn có một danh sách chung:

var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList();

Cảm ơn, chính xác những gì tôi đang tìm kiếm!
Mark LeMoine

5
Điều này khiến tôi luôn tự hỏi tại sao Enumnum.GetValues()Enumnum.GetNames()không tồn tại.
dalle

8
Đối với một biến mảng trong đó kiểu phần tử được biết tại thời điểm biên dịch, hãy sử dụng var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen

HoặcEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5

@ mr5: Trong ví dụ của bạn, ActualTypenghĩa là gì? Đối với một enum, nó sẽ nằm Enumnumtrong ví dụ của OP, hoặc nó có thể là kiểu cơ bản (thường là int). Bạn có điều gì khác trong tâm trí không?
Dirk Vollmar

16

Hãy thử mã này:

Enum.GetNames(typeof(Enumnum));

Điều này trả về a string[]với tất cả các tên enum của enum đã chọn.


1
Trả về tên của các giá trị enum; OP dường như đang theo đuổi các giá trị .
Michael Petrotta

6
Enum.GetValues(typeof(Enumnum));

trả về một mảng các giá trị trong Enum.


5

Bạn có thể muốn làm như thế này:

public enum Enumnum { 
            TypeA = 11,
            TypeB = 22,
            TypeC = 33,
            TypeD = 44
        }

Tất cả các giá trị int của điều này enum11,22,33,44.

Bạn có thể nhận được các giá trị này bằng cách:

var enumsValues = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList().Select(e => (int)e);

string.Join(",", enumsValues)11,22,33,44.



2

Với cái này:

string[] myArray = Enum.GetNames(typeof(Enumnum));

và bạn có thể truy cập mảng giá trị như sau:

Array myArray = Enum.GetValues(typeof(Enumnum));

1
Enum.GetValues ​​không trả về một chuỗi []
messenger

1

Bạn có thể dùng

Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().ToArray();

Điều này trả về một mảng!


1

Nếu bạn thích một cách chung chung hơn, đây là nó. Bạn có thể thêm nhiều trình chuyển đổi theo nhu cầu của mình.

    public static class EnumConverter
    {

        public static string[] ToNameArray<T>()
        {
            return Enum.GetNames(typeof(T)).ToArray();
        }

        public static Array ToValueArray<T>()
        {
            return Enum.GetValues(typeof(T));
        }

        public static List<T> ToListOfValues<T>()
        {
            return Enum.GetValues(typeof(T)).Cast<T>().ToList();
        }


        public static IEnumerable<T> ToEnumerable<T>()
        {
            return (T[])Enum.GetValues(typeof(T));
        }

    }

Triển khai mẫu:

   string[] roles = EnumConverter.ToStringArray<ePermittedRoles>();
   List<ePermittedRoles> roles2 = EnumConverter.ToListOfValues<ePermittedRoles>();
   Array data = EnumConverter.ToValueArray<ePermittedRoles>();

0

bạn cũng có thể sử dụng

var enumAsJson=typeof(SomeEnum).Name + ":[" + string.Join(",", Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().Select(e => e.ToString())) + "]";

để lấy tất cả các phần tử ở định dạng enum dưới dạng json.


0

OP hỏi Làm thế nào để lấy một mảng tất cả các enumgiá trị trong C #?

Điều gì sẽ xảy ra nếu bạn muốn nhận một mảng các enumgiá trị đã chọn trong C #?

Enum của bạn

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Nếu bạn muốn chỉ chọn Sundaytừ của bạn Enum.

  WeekDays[] weekDaysArray1 = new WeekDays[] { WeekDays.Sunday };

  WeekDays[] weekDaysArray2 = Enum.GetValues(typeof(WeekDays)).Cast<WeekDays>().Where
  (x => x == WeekDays.Sunday).ToArray();

Tín dụng cho tl hiểu biết.

Người giới thiệu:

1.

2.

Hy vọng sẽ giúp ai đó.

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.