Laden...

[Gelöst] - Alternative bei Reflection zu GetProperty mit fixem String

Erstellt von mosspower vor 9 Jahren Letzter Beitrag vor 9 Jahren 985 Views
mosspower Themenstarter:in
456 Beiträge seit 2007
vor 9 Jahren
[Gelöst] - Alternative bei Reflection zu GetProperty mit fixem String

Hallo,

ich brauche von einem Property den aktuellen Wert und einen bestimmten Wert von einem Property-Attribute.

Jetzt ist ja die "herkömmliche" Vorgehensweise so, dass man mit GetProperty("PropertyName") eine Instanz von PropertyInfo erhält und dann kann ich mittels GetValue an den aktuellen Wert kommen und mit GetCustomAttributes eben an den Attributewert.

Was mir an dieser Lösung nicht gefällt ist der "fest verdrahtete" String in der GetProperty-Methode.
Klar, ich kann Konstanten festlegen, aber ich stelle mir die Frage, ob es nicht eine schönere Lösung gibt, wo mittels der Property der Klasseninstanz die Werte abgefragt werden können.

Bei Threads ist es doch auch so, dass man mit dem Delegate den Methodennamen angibt.

Ich hätte gerne eine Lösung in der Art:


// The classic way
PropertyInfo propertyInfo = this.GetType().GetProperty("Description")
// The other way?
PropertyInfo propertyInfo = this.GetType().GetProperty(this.Description[Delegate?].getName())

Description ist der Name des Properties, ich möchte direkt mit der Instanz arbeiten, so dass ich den fest verdrahteten String, hier "Description" vermeiden kann.

Geht das irgendwie?

16.807 Beiträge seit 2008
vor 9 Jahren

        public static string GetPropertyName<T>( Expression<Func<T, object>> expr )
        {
            var body = expr.Body as MemberExpression;
            if ( body != null )
            {
                return body.Member.Name;
            }
            return ( ( MemberExpression ) ( ( UnaryExpression ) expr.Body ).Operand ).Member.Name;
        }

Ist die kürzeste Fassung, die ich kenne.

Verwendung dann GetPropertyName<ClassName>( cl => cl.Description ).

PS: sowas nennt man auch "Magic String": Magic Strings vermeiden

mosspower Themenstarter:in
456 Beiträge seit 2007
vor 9 Jahren

Vielen Dank für die Lösung und gleich noch was zusätzlich gelernt! 👍