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?
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
Vous devez ajouter BindingFlags.Public | BindingFlags.Instance
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.