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

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

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

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

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

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

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

3 ответа

Решение

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

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

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

Другие вопросы по тегам