2010-09-28 23 views
61

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

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

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

+4

bản sao có thể có của [chuyển đổi enum thành danh sách trong C#] (http://stackoverflow.com/questions/1167361/convert-enum-to-list-in-c) –

Trả lời

116

này sẽ cho bạn một mảng đồng bằng các giá trị enum sử dụng Enum.GetValues:

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

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

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

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

+5

Điều này làm cho tôi luôn tự hỏi tại sao 'Enumnum.GetValues ​​()' và 'Enumnum.GetNames()' không tồn tại. – dalle

+4

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

1

Bạn có thể sử dụng

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

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

6
Enum.GetValues(typeof(Enumnum)); 

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

12

Hãy thử mã này:

Enum.GetNames(typeof(Enumnum)); 

này trả về một 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 có vẻ là sau các giá trị * *. –

1

với điều này:

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

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

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

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

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())) + "]"; 

cho có được tất cả các yếu tố trong enum như là định dạng json .

2

Something chút khác nhau:

typeof(SomeEnum).GetEnumValues(); 
1

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ả int giá trị của việc này là enum11,22,33,44.

Bạn có thể nhận các giá trị của thành viên này:

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

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

0

Nếu bạn thích một cách chung chung hơn, đây rồi. Bạn có thể thêm nhiều trình chuyển đổi hơn 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)); 
     } 

    } 

mẫu Triển khai:

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

Các OP hỏi Làm thế nào để có được một mảng của tất cả enum giá trị trong C#?

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

Enum bạn

enum WeekDays 
    { 
     Sunday, 
     Monday, 
     Tuesday 
    } 

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

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

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

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

Tài liệu tham khảo:

1.

2.

Hope giúp một ai đó.

Các vấn đề liên quan