BindingFlags.IgnoreCase не работает для Type.GetProperty()?

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

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

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

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

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

У кого-нибудь появилась идея?

Ответ 1

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

Ответ 2

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

Ответ 3

Спасибо, это действительно помогло мне сегодня. Я сохранил аудиторскую информацию, но с неправильной оболочкой имен свойств. (Аудит встроен в datalayer.) В любом случае мне пришлось добавить 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.