BindingFlags.IgnoreCase no funciona para el tipo.getProperty()?


Imagine lo siguiente

Un tipo T tiene una compañía de campo. Al ejecutar el siguiente método funciona perfectamente:

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

Con la siguiente llamada obtengo null aunque

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

¿Alguien tiene una idea?

Author: Boris Callens, 2008-11-05

3 answers

Ha sobrescrito los indicadores de búsqueda predeterminados, si especifica nuevos indicadores debe proporcionar toda la información para que se pueda encontrar la propiedad. Por ejemplo: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

 292
Author: Pop Catalin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-06 16:12:38

Necesitas agregar BindingFlags.Public | BindingFlags.Instance

 16
Author: leppie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-05 10:07:38

Gracias, esto realmente me ayudó en un apuro hoy. Tenía información de auditoría guardada, pero con un casing incorrecto en los nombres de las propiedades. (La auditación está integrada en un datalayer.) De todos modos, así que tuve que agregar IgnoreCase como una bandera vinculante, pero luego todavía no funcionó, hasta que mi compañero de trabajo encontró esta respuesta. La función 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 });
}

Esto es parte de una clase que llamo DotMagic.

 6
Author: Josh Warner-Burke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-26 07:55:41