2011-07-23 30 views
9

Tôi muốn lấy tên và giá trị từ loại enum trong D2. Tôi biết tôi có thể nhận được giá trị enum bằng cách sử dụng std.traits nhưng những gì về tên?Có thể lấy tên và giá trị của các thành viên của enum trong D không?

Given:

enum lst 
{ 
    apple, 
    bottle, 
    orange, 
    blue  
} 

Tôi muốn để có được một mảng kết hợp như thế nào.

string lstmap[int] = [1:"apple", 2:"bottle", 3:"orange", 4:"blue"]. 

Câu trả lời là có. Các giải pháp, như ai đó chỉ cho tôi là:

foreach (i, member; __traits(allMembers, lst)) { 
    lstmap[cast(int) __traits(getMember, lst, member)] = member; 
} 
+2

Bạn có thể tự mình gửi câu trả lời và đánh dấu câu trả lời là được chấp nhận để câu hỏi không còn hiển thị là chưa được trả lời? – klickverbot

Trả lời

13
foreach (i, member; __traits(allMembers, lst)) { 
    lstmap[cast(int) __traits(getMember, lst, member)] = member; 
} 

(sao chép từ câu hỏi như cộng đồng wiki)

2

Trong trường hợp bạn muốn điều này chỉ duy nhất cho mục đích của giá trị-to-chuỗi convertation, xem xét sử dụng std.conv.to!string(lst.orange) - sẽ đánh giá thành "orange".

-1
 //ENUMList is the name of Enum 

     var values = (ENUMList[])Enum.GetValues(typeof(ENUMList)); 
     var query = from name in values 
        select new EnumData//EnumData is a Modal or Entity 
        { 
         ID = (short)name, 
         Name = GetEnumDescription(name)//Description of Particular Enum Name 
        }; 
     return query.ToList(); 
+0

Câu trả lời của bạn dành cho C#, chứ không phải D – Nekuromento

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