2008-11-05 7 views
110

Imagine el siguienteBindingFlags.IgnoreCase no funciona para Type.GetProperty()?

Un tipo T tiene un campo Company. Al ejecutar el siguiente método funciona perfectamente:

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

con el siguiente llamado consigo nula aunque

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

Alguien tiene una idea?

+0

Si su pregunta es válida, ¿por qué querría ignorar la carcasa en Reflection? – OregonGhost

+9

@OregonGhost: ¿Importa? – leppie

+6

Si bien tu meta pregunta es válida, realmente no importa. Como la mayoría de mis preguntas, mi razón principal es el hambre de conocimiento;) –

Respuesta

256

Usted ha sobrescrito las banderas de consulta por defecto, si se especifica nuevas banderas que necesita para proporcionar toda la información para que la propiedad se puede encontrar. Por ejemplo: BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance

+2

cualquiera tiene alguna idea de por qué es así (pregunta por el conocimiento;)) – Shrivallabh

9

es necesario agregar BindingFlags.Public | BindingFlags.Instance

4

Gracias, esto realmente me ayudó en un apuro hoy. Tenía la información de auditoría guardada, pero con una cubierta 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 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.

Cuestiones relacionadas