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 deviens nul
Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)
Quelqu'un a une idée?
c#
reflection
getproperty
bindingflags
Boris Callens
la source
la source
Réponses:
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
la source
BindingFlags
, il n'y aurait aucun moyen de ne pas utiliser les valeurs par défaut. Ie Il ne serait pas possible d'exclure desPublic
propriétés ou d'exclure desInstance
propriétés. Ils ont décidé que vous preniez les valeurs par défaut ou que vous les remplaçiez en spécifiant exactement ce que vous recherchez.Vous devez ajouter
BindingFlags.Public | BindingFlags.Instance
la source
Merci, cela m'a vraiment aidé à la rigueur aujourd'hui. J'avais des informations d'audit enregistrées, mais avec un boîtier incorrect sur les noms de propriété. (L'audit est intégré à un datalayer.) Quoi qu'il en soit, j'ai 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:
Cela fait partie d'une classe que j'appelle DotMagic.
la source