Frage

Gibt es eine Möglichkeit in C # zu:

  1. Erfahren Sie alle Eigenschaften einer Klasse, die Attribute auf sie haben (im Vergleich zu durch alle Eigenschaften Schleife und dann prüfen, ob Attribut vorhanden ist.

  2. Wenn ich alle öffentlich will, interne und geschützte Eigenschaften, aber keine privaten Eigenschaften, ich kann nicht einen Weg zu tun, dass finden. Ich kann dies nur tun:

    Propertyinfo [] Requisiten = type.GetProperties (BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)

Gibt es eine Möglichkeit bekommt private Eigenschaften zu vermeiden, aber alles tun, sonst erhalten.

War es hilfreich?

Lösung

Ich glaube nicht, dass es einen Weg gibt, entweder von diesen zu tun.

Wie viele Arten müssen Sie reflektieren über, obwohl? Ist es wirklich ein Engpass? Sind Sie in der Lage, die Ergebnisse in den Cache zu vermeiden, dass es tun mehr als einmal pro Typ?

Andere Tipps

Caching In Bezug auf: Wenn Sie Eigenschaften über TypeDescriptor.GetProperties zugreifen dann erhalten Sie Caching kostenlos. Die TypeDescriptor Klasse hat einige andere nette nützliche Methoden für die Reflexion Situationen wie diese. Es funktioniert nur auf public Eigenschaften obwohl (keine protected oder internal Mitglieder und keine Felder).

Es ist nicht wirklich eine Möglichkeit, es zu tun, jeden schneller - aber was kann man tun, ist es nicht weniger häufig durch die Daten-Caching. Eine generische Utility-Klasse kann eine praktische Möglichkeit, dies zu tun, zum Beispiel:

static class PropertyCache<T>
{
    private static SomeCacheType cache;
    public static SomeCacheType Cache
    {
        get
        {
            if (cache == null) Build();
            return cache;
        }
    }
    static void Build()
    {
        /// populate "cache"
    }
}

Dann wird Ihre PropertyCache.Cache die Daten hat nur für Foo, etc. - mit fauler Bevölkerung. Sie könnten auch einen statischen Konstruktor verwenden, wenn Sie es vorziehen.

Als Reaktion auf (2). Wenn Sie außerhalb der Klasse / Montage in Frage, internal und protected sind die gleichen wie private

Wenn Sie diese zugreifen möchten, werden Sie für alle Eigenschaften müssen fragen, wie Sie bereits getan, und filtern Sie die Liste selbst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top