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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top