245 votes

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

Imaginez ce qui suit

Un type T a un champ Société. Lorsque vous exécutez la méthode suivante, cela fonctionne parfaitement:

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

Avec l'appel suivant, je suis nul si

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

Quelqu'un a une idée?

498voto

Pop Catalin Points 25033

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

56voto

leppie Points 67289

Vous devez ajouter BindingFlags.Public | BindingFlags.Instance

13voto

Josh Warner-Burke Points 321

Merci, cela m'a vraiment aidé dans une pincée aujourd'hui. J'avais des informations d'audit sauvegardées, mais avec une casse incorrecte sur les noms de propriété. (L’audit est intégré à une couche de données.) Quoi qu’il en soit, j’ai donc dû ajouter IgnoreCase en tant qu’indicateur de liaison, mais cela ne fonctionnait toujours pas, jusqu’à ce que mon collègue trouve la 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.

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