BindingFlags.IgnoreCase не работает для Type.GetProperty ()?
-
06-07-2019 - |
Вопрос
Представьте себе следующее
Тип 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.