Pregunta

Imagina lo siguiente

Un tipo T tiene un campo Compañía. Al ejecutar el siguiente método funciona perfectamente:

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

Con la siguiente llamada, obtengo un valor nulo

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

¿Alguien tiene una idea?

¿Fue útil?

Solución

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

Otros consejos

Debe agregar BindingFlags.Public | BindingFlags.Instance

Gracias, esto realmente me ayudó en un apuro hoy. Tenía información de auditoría guardada, pero con una carcasa incorrecta en los nombres de las propiedades. (La auditoría está integrada en una capa de datos). De todos modos, tuve que agregar IgnoreCase como un indicador vinculante, pero aún así 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top