Recuperar valores en tipos reflejados de propiedades reflejadas
-
03-07-2019 - |
Pregunta
Necesito acceder a algunos miembros marcados como internos que están declarados en una asamblea de terceros.
Me gustaría devolver un valor de una propiedad interna particular en una clase. Entonces me gustaría recuperar un valor de una propiedad en ese valor devuelto. Sin embargo, estas propiedades devuelven tipos que también son internos y están declarados en este conjunto de terceros.
Los ejemplos de hacer esto que he visto son simples y solo muestran devolver int o bool. ¿Alguien puede dar algún código de ejemplo que maneje este caso más complejo?
Solución
Simplemente sigue investigando el valor devuelto (o el PropertyType de PropertyInfo):
u
sing System;
using System.Reflection;
public class Foo
{
public Foo() {Bar = new Bar { Name = "abc"};}
internal Bar Bar {get;set;}
}
public class Bar
{
internal string Name {get;set;}
}
static class Program
{
static void Main()
{
object foo = new Foo();
PropertyInfo prop = foo.GetType().GetProperty(
"Bar", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
object bar = prop.GetValue(foo, null);
prop = bar.GetType().GetProperty(
"Name", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
object name = prop.GetValue(bar, null);
Console.WriteLine(name);
}
}
Otros consejos
Siempre puede recuperarlo como un objeto y usar la reflexión sobre el tipo devuelto para invocar sus métodos y acceder a sus propiedades.