BindingFlags.IgnoreCase ne fonctionne pas pour Type.GetProperty ()?
-
06-07-2019 - |
Question
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, j'obtiens null si
Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)
Quelqu'un a une idée?
La solution
Vous avez remplacé 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é soit trouvée. Par exemple: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance
Autres conseils
Vous devez ajouter BindingFlags.Public | BindingFlags.Instance
Merci, cela m’a vraiment beaucoup aidé 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, je devais donc 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.