2011-05-12 12 views
20

Estoy tratando de leer todas las propiedades de un objeto dado, leyendo solo aquellas que están declaradas en el tipo del objeto, excluyendo aquellas que son heredadas. IE:Obtener propiedades no heredadas

class Parent { 
    public string A { get; set; } 
} 

class Child : Parent { 
    public string B { get; set; } 
} 

Así que solo quiero recuperar B. Al leer los documentos, supuse que a continuación estaba lo que necesitaba, pero eso en realidad no me devolvió nada.

var names = InstanceOfChild.GetType().GetProperties(BindingFlags.DeclaredOnly).Select(pi => pi.Name).ToList(); 
+0

gracias por esta pregunta, me estaba tirando de mi pelo a lo largo de este –

Respuesta

22

sólo necesitan un par de otras BindingFlags

var names = InstanceOfChild.GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance).Select(pi => pi.Name).ToList(); 
5

Prueba esto:

var names = InstanceOfChild.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).Select(pi => pi.Name).ToList(); 

he añadido el BidningFlags.Instance y BindingFlags.Public a los parámetros de búsqueda que según el MSDN documentation respetuosamente:

especifica que los miembros de instancia son a ser incluidos en la búsqueda.

y

Especifica que los miembros públicos son a ser incluidos en la búsqueda.

+1

que es contrario a la intuición para mí que es necesaria la bandera Instancia aquí –

Cuestiones relacionadas