2008-11-05 34 views
110

Hãy tưởng tượng sau đâyBindingFlags.IgnoreCase không hoạt động đối với Type.GetProperty()?

Loại T có một Công ty hiện trường. Khi thực hiện phương pháp sau đây nó hoạt động hoàn hảo:

Type t = typeof(T); 
t.GetProperty("Company") 

Whith cuộc gọi sau tôi nhận được null dù

Type t = typeof(T); 
t.GetProperty("company", BindingFlags.IgnoreCase) 

Bất kỳ ai có một ý tưởng?

+0

Trong khi câu hỏi của bạn hợp lệ, tại sao bạn muốn bỏ qua vỏ trong Reflection? – OregonGhost

+9

@OregonGhost: Có quan trọng không? – leppie

+6

Trong khi câu hỏi meta của bạn là hợp lệ, nó thực sự không quan trọng. Như hầu hết các câu hỏi của tôi, lý do chính của tôi là sự đói khát kiến ​​thức;) –

Trả lời

256

Bạn đã ghi đè các nhìn lên lá cờ mặc định, nếu bạn chỉ định cờ mới, bạn cần phải cung cấp tất cả các thông tin do đó tài sản có thể được tìm thấy. Ví dụ: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

+2

bất kỳ ai có bất kỳ ý tưởng tại sao nó là như thế này (yêu cầu vì lợi ích kiến ​​thức;)) – Shrivallabh

9

Bạn cần phải thêm BindingFlags.Public | BindingFlags.Instance

4

Cảm ơn, điều này thực sự đã giúp tôi hiểu rõ hơn trong ngày hôm nay. Tôi đã lưu thông tin kiểm tra, nhưng với vỏ không chính xác trên tên thuộc tính. (Việc kiểm tra được xây dựng thành một datalayer.) Dù sao, vì vậy tôi đã phải thêm IgnoreCase như là một lá cờ ràng buộc, nhưng sau đó nó vẫn không làm việc, cho đến khi đồng nghiệp của tôi tìm thấy câu trả lời này. Hàm kết quả:

public static void SetProperty(Object R, string propertyName, object value) 
{ 
    Type type = R.GetType(); 
    object result; 
    result = type.InvokeMember(
     propertyName, 
     BindingFlags.SetProperty | 
     BindingFlags.IgnoreCase | 
     BindingFlags.Public | 
     BindingFlags.Instance, 
     null, 
     R, 
     new object[] { value }); 
} 

Đây là một phần của lớp tôi gọi là DotMagic.

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