web-dev-qa-db-fra.com

BindingFlags.IgnoreCase ne fonctionne pas pour Type.GetProperty ()?

Imaginez ce qui suit

Un type T a un champ Société. Lors de l'exécution de la méthode suivante, cela fonctionne parfaitement:

Type t = typeof(T);
t.GetProperty("Company")

Avec l'appel suivant, je suis nul

Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)

Quelqu'un a une idée?

158
Boris Callens

Vous avez remplacé les indicateurs de recherche par défaut, si vous spécifiez de nouveaux indicateurs, vous devez fournir toutes les informations afin que la propriété puisse être trouvée. Par exemple: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

347
Pop Catalin

Vous devez ajouter BindingFlags.Public | BindingFlags.Instance

28
leppie

Merci, cela m'a vraiment aidé aujourd'hui. J'ai fait enregistrer les informations d'audit, mais avec une casse incorrecte sur les noms de propriété. (L'audit est intégré dans une base de données.) Quoi qu'il en soit, j'ai donc dû ajouter IgnoreCase comme indicateur de liaison, mais cela n'a toujours pas fonctionné, jusqu'à ce que mon collègue trouve cette réponse. La fonction résultante:

public static void SetProperty(Object R, string propertyName, object value)
{
    Type type = R.GetType();
    object result;
    result = type.InvokeMember(
        propertyName, 
        BindingFlags.SetProperty | 
        BindingFlags.IgnoreCase | 
        BindingFlags.Public | 
        BindingFlags.Instance, 
        null, 
        R, 
        new object[] { value });
}

Cela fait partie d'une classe que j'appelle DotMagic.

9
Josh Warner-Burke