Pergunta

Imagine a seguinte

Um tipo T tem um campo Company. Ao executar o seguinte método funciona perfeitamente:

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

Whith a seguinte chamada recebo nula embora

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

Alguém tem uma idéia?

Foi útil?

Solução

Você substituídas as bandeiras olhar-up padrão, se você especificar novas bandeiras que você precisa fornecer todas as informações para que a propriedade pode ser encontrado. Por exemplo: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

Outras dicas

Você precisa adicionar BindingFlags.Public | BindingFlags.Instance

Obrigado, isso realmente me ajudou em uma pitada hoje. Tive informações de auditoria salvo, mas com embalagem incorreta sobre os nomes das propriedades. (A auditoria é construído em uma dataLayer.) De qualquer forma, então eu tive que adicionar IgnoreCase como um sinalizador de ligação, mas então ele ainda não funcionou, até o meu colega de trabalho acharam esta resposta. A função resultante:

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 });
}

Esta é parte de uma classe que eu chamo DotMagic.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top