91 votes

Comment obtenir le PropertyInfo d'une propriété spécifique?

Je veux obtenir le PropertyInfo pour une propriété spécifique. Je pourrais utiliser:

 foreach(PropertyInfo p in typeof(MyObject).GetProperties())
{
    if ( p.Name == "MyProperty") { return p }
}
 

Mais il doit y avoir un moyen de faire quelque chose de semblable à

 typeof(MyProperty) as PropertyInfo
 

Y a-t-il? Ou suis-je obligé de faire une comparaison de chaînes non sécurisée?

À votre santé.

138voto

Marc Gravell Points 482669

Il existe un moyen .NET 3.5 avec lambdas / Expression qui n'utilise pas de chaînes de caractères ...

 using System;
using System.Linq.Expressions;
using System.Reflection;

class Foo
{
    public string Bar { get; set; }
}
static class Program
{
    static void Main()
    {
        PropertyInfo prop = PropertyHelper<Foo>.GetProperty(x => x.Bar);
    }
}
public static class PropertyHelper<T>
{
    public static PropertyInfo GetProperty<TValue>(
        Expression<Func<T, TValue>> selector)
    {
        Expression body = selector;
        if (body is LambdaExpression)
        {
            body = ((LambdaExpression)body).Body;
        }
        switch (body.NodeType)
        {
            case ExpressionType.MemberAccess:
                return (PropertyInfo)((MemberExpression)body).Member;
                break;
            default:
                throw new InvalidOperationException();
        }
    }
}
 

13voto

Vojislav Stojkovic Points 4764

Tu peux le faire:

 typeof(MyObject).GetProperty("MyProperty")
 

Cependant, comme C # n'a pas de type "symbole", rien ne vous aidera à éviter d'utiliser des chaînes. Pourquoi appelez-vous ce type dangereux, au fait?

1voto

Darin Dimitrov Points 528142

La réflexion est utilisée pour l'évaluation du type à l'exécution. Donc, vos constantes de chaîne ne peuvent pas être vérifiées au moment de la compilation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X