Ответ 1
Вы перезаписали флаги поиска по умолчанию, если вы указываете новые флаги, вам необходимо предоставить всю информацию, чтобы свойство можно было найти. Например: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance
Представьте себе следующее
Тип T имеет поле Company. При выполнении следующего метода он отлично работает:
Type t = typeof(T);
t.GetProperty("Company")
При следующем вызове я получаю null, хотя
Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)
У кого-нибудь появилась идея?
Вы перезаписали флаги поиска по умолчанию, если вы указываете новые флаги, вам необходимо предоставить всю информацию, чтобы свойство можно было найти. Например: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance
Вам нужно добавить BindingFlags.Public | BindingFlags.Instance
Спасибо, это действительно помогло мне сегодня. Я сохранил аудиторскую информацию, но с неправильной оболочкой имен свойств. (Аудит встроен в 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.