2010-03-25 28 views
5

OK, tôi không nghĩ tiêu đề nói đúng ... nhưng ở đây đi:Có thể tải một Enum dựa trên tên chuỗi không?

Tôi có một lớp học với khoảng 40 Enums trong đó. ví dụ:

Class Hoohoo 
    { 

     public enum aaa : short 
     { 
      a = 0, 
      b = 3 
     } 

     public enum bbb : short 
     { 
     a = 0, 
     b = 3 
     } 

     public enum ccc : short 
     { 
     a = 0, 
     b = 3 
     } 
} 

Bây giờ nói rằng tôi có một từ điển các chuỗi và giá trị, và mỗi chuỗi là tên của enums đề cập ở trên:

Dictionary<string,short>{"aaa":0,"bbb":3,"ccc":0} 

tôi cần phải thay đổi "aaa" vào HooBoo.aaa để nhìn lên 0. Không thể tìm cách để làm điều này vì enum là tĩnh. Nếu không, tôi sẽ phải viết một phương thức cho mỗi enum để buộc chuỗi đó vào nó. Tôi có thể làm điều đó nhưng đó là mã nhiều để viết.

Cảm ơn, Cooter

Trả lời

4

Bạn sẽ phải sử dụng Reflection để có được những kiểu enum cơ bản:

Type t = typeof(Hoohoo); 
Type enumType = t.GetNestedType("aaa"); 
string enumName = Enum.GetName(enumType, 0); 

Nếu bạn muốn nhận được các giá trị enum thực tế, sau đó bạn có thể sử dụng:

var enumValue = Enum.Parse(enumName, enumType); 
+0

Hoàn hảo. Tôi biết sẽ có một câu trả lời đơn giản .... Cảm ơn. – Cooter

0

Bạn muốn chuyển đổi chuỗi -> enum? This sẽ giúp ích.

2

Sử dụng

aaa myEnum =(aaa) Enum.Parse(typeof(aaa), "a"); 
0

Chỉ cần ghi nhớ rằng Enum.Parse không gõ mạnh mẽ ... Tôi nghĩ đó sẽ là một giới hạn thực trong kịch bản của bạn. Như bạn có thể thấy từ ví dụ của Ngu, bạn phải bỏ đầu ra.

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