2010-10-24 36 views
7

Tôi có một lớp C# mà tôi muốn lặp qua các thuộc tính như một cặp khóa/giá trị nhưng không biết làm thế nào.Có khả năng lặp qua đối tượng C# Class không?

Dưới đây là những gì tôi muốn làm:

Foreach (classobjectproperty prop in classobjectname) 
{ 
    if (prop.name == "somename") 
     //do something cool with prop.value 
} 

Cảm ơn trước sự giúp đỡ.

Trả lời

12

Yup:

Type type = typeof(Form); // Or use Type.GetType, etc 
foreach (PropertyInfo property in type.GetProperties()) 
{ 
    // Do stuff with property 
} 

này sẽ không cung cấp cho họ như cặp khóa/giá trị, nhưng bạn có thể nhận được tất cả các loại thông tin từ một PropertyInfo.

Lưu ý rằng điều này sẽ chỉ cung cấp các thuộc tính công khai. Đối với những người không công khai, bạn muốn sử dụng tình trạng quá tải phải mất BindingFlags. Nếu bạn thực sự muốn chỉ tên/cặp giá trị cho các thuộc tính thể hiện của một trường hợp cụ thể, bạn có thể làm điều gì đó như:

var query = foo.GetType() 
       .GetProperties(BindingFlags.Public | 
           BindingFlags.Instance) 
       // Ignore indexers for simplicity 
       .Where(prop => !prop.GetIndexParameters().Any()) 
       .Select(prop => new { Name = prop.Name, 
            Value = prop.GetValue(foo, null) }); 

foreach (var pair in query) 
{ 
    Console.WriteLine("{0} = {1}", pair.Name, pair.Value); 
} 
+0

Cảm ơn Jon, đã làm việc hoàn hảo. – SLoret

0

Kiểm tra các giải pháp here - mặc dù điều đó hạn chế đến properies công phương pháp này nên làm việc cho bạn để có được tất cả.

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