Domanda

Devo accedere ad alcuni membri contrassegnati come interni dichiarati in un'assemblea di terze parti.

Vorrei restituire un valore da una particolare proprietà interna in una classe. Quindi vorrei recuperare un valore da una proprietà su quel valore restituito. Tuttavia, queste proprietà restituiscono tipi che sono anche interni e dichiarati in questo assembly di terze parti.

Gli esempi di questo che ho visto sono semplici e mostrano solo il ritorno int o bool. Qualcuno può fornire qualche esempio di codice che gestisca questo caso più complesso?

È stato utile?

Soluzione

Continui a scavare sul valore restituito (o sul PropertyType del 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);
    }
}

Altri suggerimenti

Puoi sempre recuperarlo come oggetto e utilizzare la riflessione sul tipo restituito per richiamare i suoi metodi e accedere alle sue proprietà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top