Представьте себе следующее
Тип Т имеет поле Компания. При выполнении следующего метода он работает отлично:
Type t = typeof(T);
t.GetProperty("Company")
При следующем вызове я получаю ноль, хотя
Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)
У кого-нибудь есть идея?
c#
reflection
getproperty
bindingflags
Борис Калленс
источник
источник
Ответы:
Вы перезаписали флаги поиска по умолчанию, если вы указываете новые флаги, вам нужно предоставить всю информацию, чтобы свойство могло быть найдено. Например:
BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance
источник
BindingFlags
к ним, не было бы никакого способа не использовать значения по умолчанию. Т.е. было бы невозможно исключитьPublic
свойства или исключитьInstance
свойства. Они решили, что вы либо берете значения по умолчанию, либо переопределите их, указав именно то, что вам нужно.Вам нужно добавить
BindingFlags.Public | BindingFlags.Instance
источник
Спасибо, это действительно помогло мне в крайнем случае сегодня. У меня была сохранена информация аудита, но с неправильным регистром в именах свойств. (Аудит встроен в слой данных.) В любом случае мне пришлось добавить IgnoreCase в качестве флага привязки, но тогда он все еще не работал, пока мой коллега не нашел этот ответ. Полученная функция:
Это часть класса, который я называю DotMagic.
источник