2009-08-07 21 views
6

Tôi có một lớp học như thế này:Type.GetProperties Phương pháp

class ItemList 
{ 
    Int64 Count { get; set; } 
} 

và khi tôi viết những dòng này:

ItemList list = new ItemList (); 

Type type = list.GetType (); 
PropertyInfo [ ] props = type.GetProperties (); 

tôi nhận được một mảng trống cho đạo cụ.

Tại sao? Có phải vì GetProperties không bao gồm các thuộc tính tự động?

+6

'Để tất cả những ai đến từ google: 'nếu bạn vẫn không thể có được "tài sản" của bạn ngay cả sau khi cài đặt cờ, nếu bạn là người mới đến C# và không biết sự khác nhau giữa 'Properties' và' Fields', hãy thử sử dụng 'GetFields()'. Có lẽ bạn đã tìm kiếm 'các trường' cùng một lúc! – user1306322

Trả lời

18

Vấn đề là GetProperties sẽ chỉ trả lại thuộc tính công khai theo mặc định. Trong C#, các thành viên không được công khai theo mặc định (tôi tin rằng chúng là nội bộ). Hãy thử điều này thay vì

var props = type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic); 

Việc liệt kê BindingFlags khá linh hoạt. Kết hợp ở trên sẽ trả về tất cả các thuộc tính cá thể không công khai trên loại. Những gì bạn có thể muốn mặc dù là tất cả các thuộc tính cá thể bất kể khả năng truy cập. Trong trường hợp đó hãy thử như sau

var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 
var props = type.GetProperties(flags); 
+0

Cảm ơn, đã không nhận ra điều đó. Ngoài ra, bạn có thể cung cấp nhiều tùy chọn cho một đối số như thế nào? Các bit BindingFlags có thay đổi không? –

+1

@Janan, vâng. BindingFlags là một liệt kê sử dụng các cờ bit mà bạn có thể thao tác với |. Nó không cung cấp nhiều đối số, chỉ đơn thuần là tạo ra một giá trị liệt kê có các tổ hợp bit khác nhau được thiết lập. – JaredPar

+1

Joan: Cờ ràng buộc là một lá cờ enum, vì vậy bạn có thể sử dụng | để chuyển nhiều cờ vào hàm. –

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