Imagine o seguinte
Um tipo T tem um campo Empresa. Ao executar o seguinte método, ele funciona perfeitamente:
Type t = typeof(T);
t.GetProperty("Company")
Com a chamada a seguir, fico nulo
Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)
Alguém tem uma ideia?
c#
reflection
getproperty
bindingflags
Boris Callens
fonte
fonte
Respostas:
Você substituiu os sinalizadores de pesquisa padrão. Se você especificar novos sinalizadores, precisará fornecer todas as informações para que a propriedade possa ser encontrada. Por exemplo:
BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance
fonte
BindingFlags
a eles, não haveria maneira de não usar os padrões.Public
Ou seja, não seria possível excluir propriedades ou excluirInstance
propriedades. Eles decidiram que você aceita os padrões ou os substitui especificando exatamente o que procura.Você precisa adicionar
BindingFlags.Public | BindingFlags.Instance
fonte
Obrigado, isso realmente me ajudou muito hoje. Eu tinha as informações de auditoria salvas, mas com letras incorretas nos nomes das propriedades. (A auditoria está incorporada em uma camada de dados.) De qualquer forma, tive que adicionar o IgnoreCase como um sinalizador de ligação, mas ainda assim não funcionou, até que meu colega de trabalho encontrasse essa resposta. A função resultante:
Isso faz parte de uma classe que eu chamo de DotMagic.
fonte