Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

Вы перезаписали флаги поиска по умолчанию, если вы задаете новые флаги, вам нужно предоставить всю информацию, чтобы найти свойство. Например: 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top