BindingFlags.IgnoreCase не работает для Type.GetProperty ()? - PullRequest
149 голосов
/ 05 ноября 2008

Представьте себе следующее

Тип T имеет поле Company. При выполнении следующего метода он работает отлично:

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

При следующем вызове я получаю ноль, хотя

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

У кого-нибудь есть идея?

Ответы [ 3 ]

326 голосов
/ 05 ноября 2008

Вы перезаписали флаги поиска по умолчанию, если вы задаете новые флаги, вам нужно предоставить всю информацию, чтобы найти свойство. Например: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

26 голосов
/ 05 ноября 2008

Вам нужно добавить BindingFlags.Public | BindingFlags.Instance

10 голосов
/ 22 сентября 2009

Спасибо, это действительно помогло мне в крайнем случае сегодня. У меня была сохранена информация аудита, но с неправильным регистром в именах свойств. (Аудит встроен в слой данных.) В любом случае мне пришлось добавить IgnoreCase в качестве флага привязки, но тогда он все еще не работал, пока мой коллега не нашел этот ответ. Полученная функция:

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 });
}

Это часть класса, который я называю DotMagic.

...