2009-08-07 7 views
6

que tienen una clase como esta:Type.GetProperties Método

class ItemList 
{ 
    Int64 Count { get; set; } 
} 

y cuando escribo esto:

ItemList list = new ItemList (); 

Type type = list.GetType (); 
PropertyInfo [ ] props = type.GetProperties (); 

me sale una matriz vacía para los apoyos.

¿Por qué? ¿Es porque GetProperties no incluye propiedades automáticas?

+6

'Para todos los que vienen de Google:' si usted todavía no puede conseguir sus "propiedades", incluso después de ajustar banderas, si eres nuevo en C# y no se conoce el diferencia entre 'Propiedades' y' Campos', intente usar 'GetFields()'. ¡Probablemente has estado buscando 'campos' todo el tiempo! – user1306322

Respuesta

18

El problema es que GetProperties solo devolverá las propiedades públicas de manera predeterminada. En C#, los miembros no son públicos por defecto (creo que son internos). Pruebe esto en su lugar

var props = type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic); 

La enumeración de BindingFlags es bastante flexible. La combinación anterior devolverá todas las propiedades de instancias no públicas en el tipo. Sin embargo, lo que probablemente quiera son todas las propiedades de instancia independientemente de la accesibilidad. En ese caso, intente lo siguiente

var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 
var props = type.GetProperties(flags); 
+0

Gracias, no me di cuenta de eso. Además, ¿cómo puede proporcionar múltiples opciones para un solo argumento? ¿Los bits de BindingFlags cambian? –

+1

@Joan, sí. BindingFlags es una enumeración que usa indicadores de bits que puede manipular con |. No proporciona múltiples argumentos, simplemente crea un valor de enumeración que tiene varias combinaciones de bits establecidas. – JaredPar

+1

Joan: Las banderas de encuadernación son una enumeración de banderas, por lo que puede usar | pasar múltiples banderas a la función. –

Cuestiones relacionadas