2012-12-12 26 views
8

Tôi ràng buộc một enum đến một mạng lưới tài sản như thế này:Chuyển đổi chuỗi mảng để enum on the fly

public enum myEnum 
{ 
    Ethernet, 
    Wireless, 
    Bluetooth 
} 

public class MyClass 
{ 
    public MyClass() 
    { 
     MyProperty = MyEnum.Wireless; 
    } 

    [DefaultValue(MyEnum.Wireless)] 
    public MyEnum MyProperty { get; set; } 
} 

public Form1() 
{ 
    InitializeComponent(); 
    PropertyGrid pg = new PropertyGrid(); 
    pg.SelectedObject = new MyClass(); 
    pg.Dock = DockStyle.Fill; 
    this.Controls.Add(pg); 
} 

Vấn đề của tôi: Tôi có được dữ liệu một cách nhanh chóng khi chương trình đang chạy. Tôi đọc các adapter mạng thì tên cửa hàng adapter để myArray như thế này:

string[] myArray = new string[] { }; 
myArray[0] = "Ethernet"; 
myArray[1] = "Wireless"; 
myArray[2] = "Bluetooth"; 

phải là có thể chuyển đổi myArray để myEnum on the fly sử dụng C#? Cảm ơn bạn.

+0

bạn đang gán giá trị myArray [] không chính xác tại sao bạn cứng mã hóa các giá trị Enum ..? – MethodMan

Trả lời

0

Sử dụng Enum.Parse trong vòng lặp cho từng phần tử trong mảng.

2

Bạn sẽ muốn sử dụng Enum.Parse: http://msdn.microsoft.com/en-us/library/essfb559.aspx

MyProperty = (myEnum)Enum.Parse(typeof(myEnum), myArray[0]);

Làm thế nào bạn sẽ muốn sử dụng với mảng của bạn tôi đoán là lên đến nhu cầu của bạn.

EDIT: Bất kỳ cơ hội nào, có khả thi để lưu trữ tên bộ điều hợp của bạn vào mảng của bạn dưới dạng liệt kê ở địa điểm đầu tiên không? Có một số lý do mảng phải là chuỗi không?

+0

Tôi muốn liên kết myArray với lưới Thuộc tính và myArray trông giống như hộp danh sách trên lưới Propery, giống như khi liên kết loại enum với lưới thuộc tính. Đó là lý do tại sao tôi muốn chuyển đổi mảng thành enum. –

+0

Điều gì xảy ra khi bạn liên kết một mảng 'myEnum [] myArray = new [] {myEnum.Ethernet, myEnum.Wireless, myEnum.Bluetooth};' thay vào đó? –

+0

Vấn đề, loại Enum không bao giờ tồn tại. Tôi nhận được tên bộ điều hợp dữ liệu khi chương trình chạy và sau đó lưu nó vào một mảng chuỗi. Nếu mảng chuỗi liên kết với lưới thuộc tính, sẽ hiển thị một bộ sưu tập chuỗi-trình soạn thảo trên lưới thuộc tính, trong khi tôi muốn xuất hiện như một hộp danh sách trên lưới thuộc tính.Đó là lý do tại sao tôi muốn chuyển đổi một chuỗi thành một loại enum. –

7

Chắc chắn! Đây là tất cả những gì bạn cần:

IEnumerable<myEnum> items = myArray.Select(a => (myEnum)Enum.Parse(typeof(myEnum), a)); 
+1

Trên thực tế, bạn cần phải chọn 'IEnumerable items = myArray.Select (a => (myEnum) Enum.Parse (typeof (myEnum), a));' nếu không bạn sẽ gặp lỗi trình biên dịch vì Enum.Parse() trả về một đối tượng – MarkG

1

Bạn không phải sử dụng Parse nếu bạn muốn lấy tên của giá trị của enum. Không sử dụng .ToString(), sử dụng thay thế này. Ví dụ nếu tôi muốn quay trở lại Ethernet tôi sẽ làm như sau:

public enum myEnum 
{ 
    Ethernet, 
    Wireless, 
    Bluetooth 
} 

Trong lớp chính của bạn thêm dòng mã này:

var enumName = Enum.GetName(typeof(myEnum), 0); //Results = "Ethernet" 

Nếu bạn muốn liệt kê trong Enum Giá trị bạn có thể làm để nhận được các giá trị:

foreach (myEnum enumVals in Enum.GetValues(typeof(myEnum))) 
{ 
    Console.WriteLine(enumVals);//if you want to check the output for example 
} 
2

Nếu dữ liệu nguồn của bạn không hoàn toàn đáng tin cậy, bạn có thể chỉ xem xét chuyển đổi các mục có thể phân tích cú pháp thực tế, sử dụng TryParse()IsDefined().

Bắt một mảng của myEnums từ một mảng các chuỗi có thể được thực hiện bởi các mã sau:

myEnum [] myEnums = myArray 
    .Where(c => Enum.IsDefined(typeof(myEnum), c)) 
    .Select(c => (myEnum)Enum.Parse(typeof(myEnum), c)) 
    .ToArray(); 

Lưu ý rằng IsDefined() chỉ làm việc với một giá trị liệt kê đơn. Nếu bạn có [Flags] enum, kết hợp sẽ không kiểm tra.

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