BindingFlags.IgnoreCase no funciona para Type.GetProperty ()?
-
06-07-2019 - |
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?
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.