2 votes

Obtenir la liste des propriétés d'une classe T à l'aide de C# Reflection

J'ai besoin d'obtenir une liste de propriétés d'une classe. T - GetProperty<Foo>() . J'ai essayé le code suivant mais il échoue.

Exemple de classe :

public class Foo {
    public int PropA { get; set; }
    public string PropB { get; set; }
}

J'ai essayé le code suivant :

public List<string> GetProperty<T>() where T : class {

    List<string> propList = new List<string>();

    // get all public static properties of MyClass type
    PropertyInfo[] propertyInfos;
    propertyInfos = typeof(T).GetProperties(BindingFlags.Public |
                                                    BindingFlags.Static);
    // sort properties by name
    Array.Sort(propertyInfos,
            delegate (PropertyInfo propertyInfo1,PropertyInfo propertyInfo2) { return propertyInfo1.Name.CompareTo(propertyInfo2.Name); });

    // write property names
    foreach (PropertyInfo propertyInfo in propertyInfos) {
        propList.Add(propertyInfo.Name);
    }

    return propList;
}

J'ai besoin d'obtenir la liste des noms de propriétés

Sortie attendue : GetProperty<Foo>()

new List<string>() {
    "PropA",
    "PropB"
}

J'ai essayé beaucoup de références de stackoverlow, mais je n'arrive pas à obtenir le résultat attendu.

Référence :

  1. c# obtenir TOUTES les propriétés d'un objet
  2. Comment obtenir la liste des propriétés d'une classe ?

Veuillez m'aider.

5voto

David L Points 22922

Vos drapeaux de liaison sont incorrects.

Comme vos propriétés ne sont pas des propriétés statiques mais plutôt des propriétés d'instance, vous devez remplacer BindingFlags.Static avec BindingFlags.Instance .

propertyInfos = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

Cela permettra de rechercher de manière appropriée les propriétés publiques, d'instance et non statiques de votre type. Vous pouvez également omettre complètement les drapeaux de liaison et obtenir les mêmes résultats dans ce cas.

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