2012-04-26 12 views
37

Tengo el siguiente código:¿Cómo obtener un valor de propiedad mediante la reflexión

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

Lo que estoy tratando de hacer es obtener el valor de una de mis propiedades de la instancia actual de una instancia en tiempo de ejecución utilizando la reflexión. ¿Cómo puedo hacer esto?

+1

Si desea una propiedad, no se ven en los campos. http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx –

+3

posible duplicado de [Obtener el valor de la propiedad de la cadena utilizando la reflexión en C#] (http://stackoverflow.com/questions/1196991/get-property -value-from-string-using-reflection-in-c-sharp) –

+0

@JacobKrall - es una propiedad de auto en realidad, que creo que el compilador crea un campo de respaldo para implementar la propiedad. – Icemanind

Respuesta

82

Algo como esto debería funcionar:

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

Pruebe el método GetProperties, debería conseguirle la propiedad, en lugar de los campos.

para recuperar el valor, hacer algo como esto:

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

Esto es usando GetProperty, que devuelve un solo objeto PropertyInfo, en lugar de una gran variedad de ellos. Luego llamamos a GetValue, que toma un parámetro del objeto para recuperar el valor de (PropertyInfo es específico para el tipo, no la instancia). El segundo parámetro para GetValue es una matriz de indexadores, para propiedades de índice, y asumo que la propiedad que le interesa no es una propiedad indexada. (Una propiedad indexada es lo que le permite hacer list[14] para recuperar el elemento 14 de la lista.)

+0

I piense que OP está interesado en una propiedad en particular, y que esa función por sí sola no obtendrá el valor. –

Cuestiones relacionadas