2012-04-26 43 views
37

Tôi có đoạn mã sau:Làm thế nào để có được một giá trị tài sản sử dụng phản ánh

FieldInfo[] fieldInfos; 
fieldInfos = GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance); 

Những gì tôi đang cố gắng làm là nhận được giá trị của một tài sản của tôi về trường hợp khởi tạo hiện tại thời gian chạy sử dụng phản ánh. Tôi có thể làm cái này như thế nào?

+1

Nếu bạn muốn có một tài sản, không nhìn vào các lĩnh vực. http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx –

+3

bản sao có thể có của [Nhận giá trị thuộc tính từ chuỗi sử dụng sự phản chiếu trong C#] (http://stackoverflow.com/questions/1196991/get-property -value-from-string-using-reflection-in-c-sharp) –

+0

@JacobKrall - thuộc tính tự động của nó thực sự, mà tôi tin rằng trình biên dịch tạo ra một trường sao lưu để thực hiện thuộc tính. – Icemanind

Trả lời

82

Something như thế này nên làm việc:

var value = (string)GetType().GetProperty("SomeProperty").GetValue(this, null); 
21

Hãy thử phương thức GetProperties, nó sẽ giúp bạn có được thuộc tính thay vì các trường.

Để lấy giá trị, làm một cái gì đó như thế này:

object foo = ...; 
object propertyValue = foo.GetType().GetProperty("PropertyName").GetValue(foo, null); 

này được sử dụng GetProperty, mà trả về chỉ là một đối tượng PropertyInfo, chứ không phải là một mảng trong số họ. Chúng tôi sau đó gọi GetValue, trong đó có một tham số của đối tượng để lấy giá trị từ (PropertyInfo là cụ thể cho loại, không phải là trường hợp). Tham số thứ hai cho GetValue là một mảng các bộ chỉ mục, cho các thuộc tính chỉ mục và tôi giả định thuộc tính mà bạn quan tâm không phải là một thuộc tính được lập chỉ mục. (Một tài sản được lập chỉ mục là những gì cho phép bạn làm list[14] để lấy các yếu tố thứ 14 của danh sách.)

+0

I nghĩ rằng OP quan tâm đến một tài sản nói riêng, và chức năng đó một mình sẽ không nhận được giá trị. –

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