2012-01-31 22 views
16

Im cố gắng để có được những giá trị từ một PropertyInfo[], nhưng tôi không thể làm cho nó làm việc:Get giá trị PropertyInfo

foreach (var propertyInfo in foo.GetType().GetProperties()) 
{ 
     var value = propertyInfo.GetValue(this, null); 
} 

Ngoại lệ: Object does not match target type.

Isnt này như thế nào nó phải được thực hiện?

+0

Loại 'this' và' foo' là gì? – BNL

+0

'This' có chứa thuộc tính được đại diện bởi' propertyInfo' không? –

Trả lời

29

Bạn đang cố gắng nhận các thuộc tính từ this khi bạn tìm nạp số PropertyInfo từ số foo.GetType(). Vì vậy, đây sẽ là thích hợp hơn:

var value = propertyInfo.GetValue(foo, null); 

Đó là giả sử bạn muốn để có được hiệu quả foo.SomeProperty, vv

+1

@Johan: Không, nó đề cập đến bất kỳ đối tượng nào bạn đang ở trong bối cảnh, cũng giống như bình thường ... 'propertyInfo' đề cập đến mỗi' propertyInfo' trong vòng lặp. –

7

Bạn đang nhận được ngoại lệ mà vì this không phải là loại giống như foo.

Bạn nên đảm bảo bạn đang nhận được các thuộc tính cho cùng một đối tượng mà bạn sẽ cố gắng lấy giá trị. Tôi đoán từ mã của bạn mà bạn đang mong đợi điều này là foo bên trong phạm vi của vòng lặp (mà không phải là trường hợp ở tất cả), vì vậy bạn cần phải thay đổi dòng vi phạm đến:

var value = propertyInfo.GetValue(foo, null); 
4

Bạn đang xử lý các thuộc tính được khai báo theo kiểu của foo, nhưng cố gắng đọc các giá trị của chúng từ this, dường như không cùng loại.

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